c# WebBrowser按钮单击,然后转到另一个页面

本文关键字:另一个 然后 WebBrowser 按钮 单击 | 更新日期: 2023-09-27 18:12:22

我需要点击一个html按钮并导航到另一个页面。点击后需要等待页面加载,只有当旧页面加载后才能进入新页面。

下面是点击按钮的代码:

element = webBrowser1.Document.GetElementById("LoginButton");
element.InvokeMember("click");

webBrowser有一个IsBusy属性,但它不工作后,按钮点击:

element = webBrowser1.Document.GetElementById("LoginButton");
element.InvokeMember("click");
if(webBrowser1.IsBusy)
{
     MessageBox.Show("Busy"); // Nothing happens, but page is not full loaded.
}

如果我添加System.Threading.Thread.Sleep(1000),页面加载,我可以进入下一个页面,但页面加载时间在其他计算机上可能更多。

如何在前一个页面加载后才加载另一个页面?

p。S:我来自俄罗斯,很抱歉我的英语不好。

c# WebBrowser按钮单击,然后转到另一个页面

如果你的网页有任何javascript块,你将无法解决使用WebBrowser控件本身的问题。你应该等一份文件。使用javascript代码准备事件,并让您的c#程序了解它。

之前,我制作了一个javascript块来提供网页状态。它看起来像这样:

var isBusy = true;
function getIsScriptBusy () {
   return isBusy;
}
// when loading is complete:
// isBusy = false;
// document.ready event, for example

和等待它返回true的c#代码:

void WaitForCallback(int timeout) {
    Stopwatch w = new Stopwatch();
    w.Start();
    Wait(delegate() {
        return (string)Document.InvokeScript("getIsScriptBusy") != "false"
            && (w.ElapsedMilliseconds < timeout || Debugger.IsAttached);
    });
    if(w.ElapsedMilliseconds >= timeout && !Debugger.IsAttached)
        throw new Exception("Operation timed out.");
}
void Wait(WaitDelegate waitCondition) {
    int bRet;
    MSG msg = new MSG();
    while(waitCondition() && (bRet = GetMessage(ref msg, new HandleRef(null, IntPtr.Zero), 0, 0)) != 0) {
        if(bRet == -1) {
            // handle the error and possibly exit
        } else {
            TranslateMessage(ref msg);
            DispatchMessage(ref msg);
        }
        Thread.Sleep(0);
    }
}

WebBrowser控件暴露了许多事件。您可以试试NavigatedDocumentCompleted

尼克

WebBrowser.Navigated是您正在查找的浏览器事件。

你可能只能使用一次

 br1.DocumentCompleted += br1_DocumentCompleted;
        Application.Run();
电话

void br1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
        var br1 = sender as WebBrowser;
        if (br1.Url == e.Url)
        {
            Console.WriteLine("Natigated to {0}", e.Url);
            Application.ExitThread();   // Stops the thread
        }
    }

将br1替换为您的浏览器名称希望对大家有所帮助

相关文章: