gpt4 book ai didi

c# - 使用 WebBrowser 访问 DOM

转载 作者:太空狗 更新时间:2023-10-29 17:53:14 25 4
gpt4 key购买 nike

我需要在页面上执行 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();
}


}

The DOM from google chrome developer tool

The DOM I get in my code

我希望有人能帮我解决这个问题

最佳答案

如果客户端脚本确实像您所说的那样在 IE7 中执行,则问题可能纯粹是时间问题。即使在文档加载完成后,您也无法确切地知道 何时 将执行 JS 脚本。在尝试访问 documentElement 之前等待 5 秒在理论上听起来是个好主意;实际上,该元素可能在此之前就已存在。或者,网络可能很慢,仅仅获取 jQuery 脚本本身就需要 5 秒。

我建议测试您要查找的元素是否存在(img 标记,视情况而定)。类似的东西

while (browser.Document.GetElementsByTagName("img").Count == 0) {
Application.DoEvents();
}

这样,您就不需要 Thread.Sleep 行。

关于c# - 使用 WebBrowser 访问 DOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42495828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com