Webbrowser组件的问题

时间:2012-08-21 10:11:28

标签: c# browser web-crawler

我有一个程序(使用VS 2010的C#),它使用WebBrowser组件执行类似浏览器的活动。

该程序的目的是抓取网页。第一个问题是大约经过50页我收到JavaScript错误(内存不足(见图))

Script Error

要忽略此错误,请使用以下命令:

ScriptErrorsSuppressed = true

上述命令解决了脚本错误,但又产生了另一个问题:

我还使用Links.InvokeMember("click");来滚动页面,或点击Ajax链接。

所以程序出错并且ScriptErrorsSuppressed禁用它,但invoke停止点击页面...并且抓取停止。

有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

问题是您受浏览器控件中运行的客户端代码的支配。如果那不对,那么就会出现泄漏和这些内存问题。

我唯一能做的就是尝试在几页之后的某个时候处理你的浏览器控件并重新创建它,看看这是否有帮助。

答案 1 :(得分:0)

如果你想抓取网页,你真的不应该使用webbrowser控件。使用httpWebRequest类并发出请求,获取html字符串,然后您可以使用MSHTML遍历HTML字符串的链接和DOM对象,因此您将它提供给mshtml,它会将该HTML字符串转换为一个很好的对象,你可以循环(所以你不需要尝试使用字符串操作解析链接,你只需循环遍历所有内容,因为它们都被转换为对象,感谢mshtml)。

当然,通过这种方式,所有javascript和你将无法运行的东西,你将不必浪费带宽和时间加载所有这些图像,并在不需要时将所有这些元素绘制到屏幕上。

来找我?如果您需要更多帮助,请告诉我。