簡體   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