DocumentCompleted只触发一次
本文关键字:一次 DocumentCompleted | 更新日期: 2023-09-27 18:03:21
我有一个WebBrowser内的表单,我想做一些自动化与它。我点击窗口表单中的一个按钮,命令WebBrowser的导航方法指向某个页面。然后我在DocumentCompleted触发后自动单击链接,但在此之后,我还想单击通过单击链接出现的新页面中存在的按钮。似乎DocumentCompleted火灾只有当我点击窗口窗体中的按钮,而不是当我自动点击网页内的链接。
void BtnTestClick(object sender, EventArgs e)
{
webBrowser1.Navigate(@"https://play.google.com/apps/");
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
}
public void WebBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var webBrowser = sender as WebBrowser;
//webBrowser.DocumentCompleted -= WebBrowser_DocumentCompleted;
// test to see if we're on fist CONFIRM page then go forward by clicking
var links = webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
if (link.InnerText == "Proceed anyway")
{
link.InvokeMember("click");
}
} // this works
webBrowser1.Document.GetElementById("gwt-uid-126").InvokeMember("click");
}
在link.InvokeMember("click");
之后,浏览器中加载了一个新页面,其中有一个按钮,我也想点击(gwt-uid-126)
但是它没有被点击。
我也试过了:
var elements = webBrowser1.Document.GetElementsByTagName("button");
foreach (HtmlElement file in elements)
{
if (file.GetAttribute("class") == "GKYRWGTDNX GKYRWGTDLY")
{
file.Focus();
file.InvokeMember("click");
}
}
运气不好!
从我看到的,第二次点击不起作用,因为文档没有完全加载,第二次点击被调用。
你必须添加另一个if-else块来处理第二次文档加载。
编辑1:当我回答这个问题时,我正在打电话,所以不能提供任何片段。以下是您可以做WebBrowser_DocumentCompleted
方法的更改。
var links = webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
if (link.InnerText == "Proceed anyway")
{
link.InvokeMember("click");
}
}
// following is for the page that is loaded on click of link.
var gwt_uid_126 = webBrowser1.Document.GetElementById("gwt-uid-126");
if(gwt_uid_126 != null)
{
gwt_uid_126.InvokeMember("click");
}
您可能想要检查WebBrowser_DocumentCompleted
方法是否实际上在第二次页面加载时被调用。这可能是第二次点击没有注册的原因。
将这部分代码移到构造函数或Form_Load中:
webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
试试这个代替使用WebBrowserDocumnetCompletedEventHandler:
void btnTestClick(object sender, EventArgs e)
{
webBrowser1.Navigate(@"https://www.google.com/");
while (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
continue;
var webBrowser = sender as WebBrowser;
//webBrowser.DocumentCompleted -= WebBrowser_DocumentCompleted;
// test to see if we're on fist CONFIRM page then go forward by clicking
var links = webBrowser1.Document.GetElementsByTagName("a");
foreach (HtmlElement link in links)
{
if (link.InnerText == "Proceed anyway")
{
link.InvokeMember("click");
}
} // this works
webBrowser1.Document.GetElementById("gwt-uid-126").InvokeMember("click");
}