我正在尝试使用 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/