如何在浏览器上运行每个方法
本文关键字:方法 运行 浏览器 | 更新日期: 2023-09-27 18:09:31
private void button2_Click(object sender, EventArgs e)
{
webBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click");
//something that wait about 1 or 2 second before execute next line?
webBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click");
webBrowser1.Document.GetElementById("language_change2").InvokeMember("Click");
}
从这个代码,我尝试了Thread.Sleep();
和Task Delay();
,但它显示了nullException…(我想是因为他们正在运行,而网页没有完全加载)有人能帮我吗?
现在,我已经弄清楚了我想要的方法是async方法,当它们还在运行时减慢时间
private async void button2_Click(object sender, EventArgs e)
{ webBrowser1.Document.GetElementById("login_login_button").InvokeMember("Click");await Task.Delay(1000); webBrowser1.Document.GetElementById("nav_settings_link").InvokeMember("Click");
await Task.Delay(1000); webBrowser1.Document.GetElementById("language_change2").InvokeMember("Click"); }
举个例子:
using System.Diagnostics;
Stopwatch sw = new Stopwatch();
int timeout = 60; // 60 seconds
sw.Start(); // Use Restart for the next element, to reset the time to 0 first.
var element = webBrowser1.Document.GetElementById("login_login_button");
while(element == null && sw.Elapsed.TotalSeconds < timeout)
{
Thread.Sleep(2000);
element = webBrowser1.Document.GetElementById("login_login_button");
}
sw.Stop();
if(element!=null)
{
element.InvokeMember("Click");
}
...
// if success, repeat with similar pattern for the next element
// if you still can't find the element, you'd better quit what you are trying to do
解释:
- 系统。启用秒表 的诊断
- 超时添加,这样您就不会永远等待
- 将元素存储到变量 中
- 每2秒检查一次元素
- 如果找到,点击并继续下一个
- 如果不是……你可能想退出你正在做的事情