繁体   English   中英

DocumentCompleted仅触发一次

[英]DocumentCompleted firing only once

我在表单内有一个WebBrowser,我想对其进行一些自动化。 我单击Windows窗体内的一个按钮,该按钮命令WebBrowser的Navigate方法进入特定页面。 然后,在触发DocumentCompleted之后,我自动单击一个链接,但此后,我还想单击通过单击链接而出现在新页面中的按钮。 看来只有当我单击Windows窗体中的按钮时才会触发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"); Web浏览器中将加载一个新页面,该页面具有一个我也要单击的按钮(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块来处理第二次文档加载。

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方法。 这可能是第二次点击未注册的原因。

在构造函数或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"); 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM