javascript 完成页面加载后,如何使用 Anglesharp 将 HTML 作为文本获取?

How to get the HTML as text using Anglesharp after the javascript has done loading the page?

我正在尝试使用 AngleSharp 在我的本地主机上抓取网页。该页面是使用 Angular js 动态生成的。我正在使用 AngleSharp 获取页面。还使用 AngleSharp 脚本库 运行 Javascript。以下是我用于 POC 目的的代码。 Javascript 渲染完成后,我不知道在哪里可以找到页面的 HTML。

t.Result.Source.Text给我网页的页面源。 javascript 完成渲染后我在哪里可以找到源代码?我什至不知道 javascript 运行 是不是 !

    static void Main(string[] args)
    {
        Task<IDocument> t = StartCrawl();
        t.Wait();
        string textContent = t.Result.Source.Text;
        Console.ReadKey();

    }

    private static async Task<IDocument> StartCrawl()
    {
        var config = Configuration.Default
            .WithDefaultLoader()
            .WithCss()
            .WithJavaScript();

        var context = BrowsingContext.New(config);
        var document = await context.OpenAsync("http://localhost:8000/#!/phones");
        return document;
    }

url 的查看来源给了我这个。如何在页面加载后 运行 页面上的所有 javascript 。我可以在 document.Scripts 属性.

中看到 16 个脚本

<!doctype html>
<html lang="en" ng-app="phonecatApp">
  <head>
    <meta charset="utf-8">
    <title>Google Phone Gallery</title>
    <link rel="stylesheet" href="bower_components/bootstrap/dist/css/bootstrap.css" />
    <link rel="stylesheet" href="app.css" />
    <link rel="stylesheet" href="app.animations.css" />

    <script src="bower_components/jquery/dist/jquery.js"></script>
    <script src="bower_components/angular/angular.js"></script>
    <script src="bower_components/angular-animate/angular-animate.js"></script>
    <script src="bower_components/angular-resource/angular-resource.js"></script>
    <script src="bower_components/angular-route/angular-route.js"></script>
    <script src="app.module.js"></script>
    <script src="app.config.js"></script>
    <script src="app.animations.js"></script>
    <script src="core/core.module.js"></script>
    <script src="core/checkmark/checkmark.filter.js"></script>
    <script src="core/phone/phone.module.js"></script>
    <script src="core/phone/phone.service.js"></script>
    <script src="phone-list/phone-list.module.js"></script>
    <script src="phone-list/phone-list.component.js"></script>
    <script src="phone-detail/phone-detail.module.js"></script>
    <script src="phone-detail/phone-detail.component.js"></script>
  </head>
  <body>

    <div class="view-container">
      <div ng-view class="view-frame"></div>
    </div>

  </body>
</html>

在 AngleSharp 中(就像在浏览器中一样)没有源的概念 JS 做了一些事情之后。你可以看看原来的转源,不过我估计不是你想要的

如果您想在特定时间查看 DOM 的字符串序列化(例如,在 JS 脚本进行一些 DOM 操作之后),那么只需执行:

var currentSource = document.ToHtml(); // current serialization of the DOM

请注意,这将以 HTML(文本)形式代表您的 DOM。

您所做的为您提供了原始源代码:

var textContent = t.Result.Source.Text; // will always contain the original source