【发布时间】:2019-05-03 01:14:26
【问题描述】:
我有一个正在加载网站的网络浏览器。如果网站触发“完成”事件,我的 HTMLElementCollection 会显示“179”的计数。如果我单击按钮并调用相同的方法来获取所有 HTMLElement,它会告诉我“194”的计数。问题是:如果“完成”事件正在触发,一些 HTMLElement 没有加载,需要更长的时间,而我需要点击它的 HTMLElement 也丢失了。
用代码解释:
private void Webbrowser_DocumentComplete(object pDisp, ref object URL)
{
if (URL.ToString() == "testsite")
{
HtmlElementCollection c1 = webBrowser1.Document.GetElementsByTagName("div");
foreach (HtmlElement e2 in c1)
{
if (e2.GetAttribute("classname") == "btn3")
{
if (e2.InnerText == "follow")
{
e2.InvokeMember("click");
}
}
}
}
}
“c1”的计数是 179。
如果我等待 1-2 秒,然后单击具有相同代码的按钮,例如:
private void Button1_Click(object sender, EventArgs e)
{
HtmlElementCollection c1 = webBrowser1.Document.GetElementsByTagName("div");
foreach (HtmlElement e2 in c1)
{
if (e2.GetAttribute("classname") == "btn3")
{
if (e2.InnerText == "follow")
{
e2.InvokeMember("click");
}
}
}
}
“c1”的计数是 194。
问题是:如果页面构建完成,我该如何等待几秒钟? 我需要 194 的计数,因为我想点击一个 HTMLElement!
【问题讨论】:
-
@Jimi 为什么这对我有帮助?
-
你没有阅读那些笔记。具体来说,耦合
DocumentCompleted事件和WebBrowser.ReadyState。与 HTML 页面的内部文档相关的任何其他内容,可以包含多个 Document。对于 HTML 页面中的每个文档,都会引发一个DocumentCompleted事件。不同的文档是异步加载的。 -
但我只想实现我可以等待 5 秒,页面正在加载,因为控件需要时间,5 秒后我尝试点击,比如 while (DateTime.Now 但网络浏览器停止加载
-
您需要等到您要查找的 HtmlElement 被加载并呈现。没有特定的 timeout 等待。当它准备好时,它就准备好了,你会得到它。仔细阅读我链接的内容并查看相关代码。顺便说一句,这正是您需要做的事情。
标签: c# webbrowser-control