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");
    }
}   

运气不好!

DocumentCompleted只触发一次

从我看到的,第二次点击不起作用,因为文档没有完全加载,第二次点击被调用。

你必须添加另一个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"); 
}