c# – 使用WebBrowser访问DOM
发布时间:2020-12-15 06:39:02 所属栏目:百科 来源:网络整理
导读:在页面上执行 javascript之后,我需要访问HTML文档的DOM.我有以下代码连接到URL并获取文档. 问题是它修改后不会得到DOM public class CustomBrowser{ public CustomBrowser() { // // TODO: Add constructor logic here // } protected string _url; string h
在页面上执行
javascript之后,我需要访问HTML文档的DOM.我有以下代码连接到URL并获取文档.
问题是它修改后不会得到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(); } } 我希望有人可以帮我解决这个问题 解决方法
如果客户端脚本确实在IE7中执行,那么问题可能只是时间.即使文档的加载完成,您也不能确切地知道JS脚本将被执行.在等待5秒钟之前,试图达到documentElement听起来像是一个理想的好主意;在实践中,元素可能存在于此之前.或者,也许网络缓慢,只是提取jQuery脚本需要5秒钟.
我建议测试你正在寻找的元素的存在(一个img标签,视情况而定).沿线的东西 while (browser.Document.GetElementsByTagName("img").Count == 0) { Application.DoEvents(); } 这样,你不需要Thread.Sleep行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |