【发布时间】:2017-07-18 15:52:11
【问题描述】:
在页面上执行 javascript 后,我需要访问 HTML 文档的 DOM。我有下面的代码连接到 URL 并获取文档。 问题是它在用 javascript 修改后永远不会得到 DOM
public class CustomBrowser
{
public CustomBrowser()
{
//
// TODO: Add constructor logic here
//
}
protected string _url;
string html = "";
WebBrowser browser;
public string GetWebpage(string url)
{
_url = url;
// WebBrowser is an ActiveX control that must be run in a
// single-threaded apartment so create a thread to create the
// control and generate the thumbnail
Thread thread = new Thread(new ThreadStart(GetWebPageWorker));
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
thread.Join();
string s = html;
return s;
}
protected void GetWebPageWorker()
{
browser = new WebBrowser();
// browser.ClientSize = new Size(_width, _height);
browser.ScrollBarsEnabled = false;
browser.ScriptErrorsSuppressed = true;
//browser.DocumentCompleted += browser_DocumentCompleted;
browser.Navigate(_url);
// Wait for control to load page
while (browser.ReadyState != WebBrowserReadyState.Complete)
Application.DoEvents();
Thread.Sleep(5000);
var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)browser.Document.DomDocument;
html = documentAsIHtmlDocument3.documentElement.outerHTML;
browser.Dispose();
}
}
希望有人能帮我解决这个问题
【问题讨论】:
-
请不要将代码发布为图片。将代码作为文本发布。此外,您应该使用事件来查找导航何时完成,而不是使用
while循环Application.DoEvents()或Thread.Sleep()。 -
我将代码添加为文本、图像以阐明浏览器中的 dom 与我得到的内容之间的区别
-
使用替代控件怎么样?例如。 stackoverflow.com/questions/790542/…
-
我用idealtackle.com作为url参数测试了你的代码,每次页面通过javascript加载时都会改变一个图像,在加载它两个不同的时间后,加载了两个不同的图像没问题,如果你想自己看看,在 browser.Dispose() 上放一个断点;然后在第 121 行的快速查看中查看 html,背景图像:每次加载时都会更改。所以我的猜测是这应该是因为您的浏览器版本或运行 javascript 的安全性或类似的东西。
-
能否请您给我们您的网址,我也核对一下?
标签: c# asp.net .net dom webbrowser-control