我正在尝试使用循环来下载一堆html页面并在内部数据中剪贴。但是,这些页面在加载时会运行一些javascript作业。因此,我认为使用webclient可能不是一个不错的选择。但是,如果我使用如下所示的webBrowser。它在循环中的第一次调用后返回空的html字符串。
WebBrowser wb = new WebBrowser();
wb.ScrollBarsEnabled = false;
wb.ScriptErrorsSuppressed = true;
wb.Navigate(url);
while (wb.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); Thread.Sleep(1000); }
html = wb.Document.DomDocument.ToString();
您是正确的,WebClient和所有其他HTTP客户端接口将完全忽略JavaScript;毕竟它们都不是浏览器。
你要:
var html = wb.Document.GetElementsByTagName("HTML")[0].OuterHtml;
请注意,如果您通过WebBrowser加载,则无需抓取原始标记。您可以使用DOM等方法GetElementById/TagName
。
while循环非常VBScript,有一个DocumentCompleted
事件应该将代码连接到其中。
private void Whatever()
{
WebBrowser wb = new WebBrowser();
wb.DocumentCompleted += Wb_DocumentCompleted;
wb.ScriptErrorsSuppressed = true;
wb.Navigate("http://stackoverflow.com");
}
private void Wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var wb = (WebBrowser)sender;
var html = wb.Document.GetElementsByTagName("HTML")[0].OuterHtml;
var domd = wb.Document.GetElementById("copyright").InnerText;
/* ... */
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句