c 抓取网页数据(网页加载到WebBrowser控件中的问题及解决办法(一))
优采云 发布时间: 2022-01-24 09:14c 抓取网页数据(网页加载到WebBrowser控件中的问题及解决办法(一))
[答案1]:
只是一个想法,但有一种方法可以让 .net 像在浏览器中一样加载网页:使用 System.Windows.Forms
您可以将网页加载到 WebBrowser 控件中
WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); }
wb.Document.DomDocument.ToString()
这可能会给你 pre ajax DOM,但也许有办法让它首先运行 ajax。
【问题讨论】:
[答案2]:
如果我正确地解释了您的问题,那么您的问题就没有简单的解决方案。
您正在从服务器获取 HTML,并且由于您的 C# 代码不是真正的 Web 浏览器,因此它不会执行客户端脚本。
这样您就无法访问您获得的 HTML 不收录的信息。
编辑:我不知道这些 AJAX 调用与原创 网站 相比有多复杂,但您可以使用 Firebug 或 Fiddler for IE 查看请求是如何发出的,以便在您的 C# 应用程序中调用这些 AJAX 调用好。因此,您可以添加所需的信息。但这只是理论上的解决方案。
【问题讨论】:
【答案3】:
当您在网络浏览器中打开网页时,浏览器会执行 javascript 并下载该页面使用的其他资源(图像、脚本等)。HttpWebRequest 本身不做任何事情,它只是下载您请求的页面的 html。它从不自己执行任何 javascript/ajax 代码。
【问题讨论】:
[答案4]:
使用 HttpWebRequest 下载页面,以编程方式搜索相关 ajax 信息的源代码,然后使用新的 HttpWebRequest 将数据拉下来。
【问题讨论】:
[答案5]:
HttpWebRequest 不模拟网络浏览器,它只是下载您指向它的资源。这意味着它不会执行甚至下载 JavaScript 文件。
您必须使用 FireBug 之类的东西来获取通过 JavaScript 提取的数据的 URL,并将您的 HttpWebRequest 指向该 URL。
【问题讨论】:
[答案6]:
使用 HttpWebRequest 下载页面。在源代码中搜索相关的 AJAX 信息,然后使用新的 HttpWebRequest 提取该数据。
【问题讨论】:
【答案7】:
您可以使用 PhantomJs。我有这个问题,但没有找到解决我的问题的方法。在我看来,最好的解决方案是This。
我的解决方案是这样的:
var page = require('webpage').create();
page.open("https://sample.com", function(){
page.evaluate(function(){
var i = 0,
oJson = jsonData,
sKey;
localStorage.clear();
for (; sKey = Object.keys(oJson)[i]; i++) {
localStorage.setItem(sKey,oJson[sKey])
}
});
page.open("https://sample.com", function(){
setTimeout(function(){
page.render("screenshoot.png")
// Where you want to save it
console.log(page.content); //page source
// You can access its content using jQuery
var fbcomments = page.evaluate(function(){
return $("body").contents().find(".content")
})
phantom.exit();
},10000)
});
});
【问题讨论】: