gpt4 book ai didi

C#解析带有ajax加载内容的网站

转载 作者:太空宇宙 更新时间:2023-11-03 19:53:21 25 4
gpt4 key购买 nike

如果我收到一个具有此功能的网站,我会得到整个页面,但没有 ajax 加载的值。

htmlDoc.LoadHtml(new WebClient().DownloadString(url));

是否可以像在 gChrome 中那样使用所有值加载网站?

最佳答案

您可以使用 WebBrowser控制获取和呈现页面。不幸的是,该控件使用 Internet Explorer,您必须 change a registry value为了强制它使用最新版本,即使这样,实现也非常脆弱。

另一种选择是采用独立的浏览器引擎,例如 WebKit并使其在 .NET 中工作。我找到了一个解释如何执行此操作的页面,但它已经过时了:http://webkitdotnet.sourceforge.net/basics.php

我开发了一个小演示应用程序来获取内容,这就是我想出的:

    class Program
{
static void Main(string[] args)
{
GetRenderedWebPage("https://siderite.dev", TimeSpan.FromSeconds(5), output =>
{
Console.Write(output);
File.WriteAllText("output.txt", output);
});
Console.ReadKey();
}

private static void GetRenderedWebPage(string url, TimeSpan waitAfterPageLoad, Action<string> callBack)
{
const string cEndLine= "All output received";

var sb = new StringBuilder();
var p = new PhantomJS();
p.OutputReceived += (sender, e) =>
{
if (e.Data==cEndLine)
{
callBack(sb.ToString());
} else
{
sb.AppendLine(e.Data);
}
};
p.RunScript(@"
var page = require('webpage').create();
page.viewportSize = { width: 1920, height: 1080 };
page.onLoadFinished = function(status) {
if (status=='success') {
setTimeout(function() {
console.log(page.content);
console.log('" + cEndLine + @"');
phantom.exit();
}," + waitAfterPageLoad.TotalMilliseconds + @");
}
};
var url = '" + url + @"';
page.open(url);", new string[0]);
}
}

这使用了 PhantomJS通过包装器实现“ headless ”浏览器 NReco.PhantomJS您可以直接从 Visual Studio 通过“引用 NuGet 包”获得。我相信它可以做得更好,但这就是我今天所做的。你可能想看看 PhantomJS 回调,这样你就可以正确地调试正在发生的事情。例如,如果 URL 不起作用,我的示例将永远等待。这是一个有用的链接:https://newspaint.wordpress.com/2013/04/25/getting-to-the-bottom-of-why-a-phantomjs-page-load-fails/

关于C#解析带有ajax加载内容的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36175240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com