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

标签 javascript c# anglesharp

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

t.Result.Source.Text 为我提供网页的页面源代码。 javascript渲染完成后在哪里可以找到Source?我什至无法弄清楚 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

关于javascript - 在 javascript 完成加载页面后,如何使用 Anglesharp 将 HTML 作为文本获取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49775958/

相关文章:

javascript - 排除字段保存在 Node mongodb native 中

c# - 从 HttpContext.Current.User 获取 AspNetUser

c# - 为什么 AngleSharp 不为交错文本生成 TextNodes?

c# - 在 AngleSharp 中,如何使用字符串创建 DOM 元素?

javascript - 计算两个 3D 矢量之间的 Angular

javascript - BackboneJS 路由

c# - 用颜色代码写入csv文件

c# - OrmLite 更新()与保存()

c# - 如何使用 AngleSharp 查找和替换链接上的 href 值?

javascript - Jquery DataTables Live DOM 排序在复选框列上不起作用