我在表单中有一个WebBrowser,我想用它做一些自动化。我单击Windows窗体中的一个按钮,该窗口命令将WebBrowser的Navigate方法命令到某个页面。然后我在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");
}
}
没有运气!
答案 0 :(得分:0)
从我看到的,第二次点击不起作用,因为文档未完全加载并且第二次点击被调用。
您必须添加另一个处理第二次文档加载的if-else块。
Edit1:当我回答这个问题时,我正在打电话,因此无法提供任何代码段。以下是您可以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
方法。这可能是第二次点击未注册的原因。
答案 1 :(得分:0)
在构造函数或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");
}