DocumentCompleted 仅触发一次 [英] DocumentCompleted firing only once

查看:54
本文介绍了DocumentCompleted 仅触发一次的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个表单中有一个 WebBrowser,我想用它做一些自动化.我单击 Windows 窗体内的一个按钮,该按钮命令 WebBrowser 的 Navigate 方法到某个页面.然后我会在 DocumentCompleted 触发后自动单击一个链接,但之后我还想单击一个存在于通过单击该链接出现的新页面中的按钮.似乎 DocumentCompleted 仅在我单击 Windows 窗体中的按钮时触发,而不是在我自动单击网页内的链接时触发.

I have a WebBrowser inside a form and I want to do some automation with it. I click a button inside a windows form that commands the Navigate method of the WebBrowser to a certain page. Then I automatically click a link after DocumentCompleted has fired but after that I want to also click a Button that exists in the new page that appeared by clicking the link. It seems DocumentCompleted fires only when I click the button in the windows form not when I automatically click the a link inside the webpage.

    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 )

After the link.InvokeMember("click"); a new page loads in the webbrowser that has a button which I also want to 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");

    }
}   

运气不好!

推荐答案

在构造函数或 Form_Load 中移动这部分代码:

move this part of code in the Constructor or Form_Load:

webBrowser1.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);

试试这个,而不是使用 WebBrowserDocumnetCompletedEventHandler:

try this instead of using 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"); 

}

这篇关于DocumentCompleted 仅触发一次的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆