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:我来自俄罗斯,很抱歉我的英语不好。
如果你的网页有任何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
控件暴露了许多事件。您可以试试Navigated
或DocumentCompleted
。
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替换为您的浏览器名称希望对大家有所帮助