使用DocumentComplete事件c#
本文关键字:事件 DocumentComplete 使用 | 更新日期: 2023-09-27 17:49:15
我开始在c#中第一次使用WebBrowser控件。我正在尝试做一些非常简单的事情:在文本框中写入文本,然后单击登录按钮。
WebContest wc_class = new WebContest();
...
wc_class.wbThread1.Navigate("http://www.mysite.com");
while (wc_class.wbThread1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();
这里的ReadyState登录页面工作完美,接下来继续在文本框中写入文本,然后点击一个按钮
wc_class.wbThread1.Document.GetElementById("field_email").SetAttribute("value", tbLogin.Text);
wc_class.wbThread1.Document.GetElementById("field_password").SetAttribute("value", tbPassword.Text);
wc_class.wbThread1.Document.GetElementById("field_remember").InvokeMember("click");
wc_class.wbThread1.Document.GetElementById("hook_FormButton_button_go").InvokeMember("click");
,这一次,登录后,我需要从页面中提取链接。这样做:
...
foreach (HtmlElement link in wc_class.wbThread1.Document.Links)
{
string href = link.GetAttribute("HREF");
string fileName = "links.txt";
using (FileStream fs = new FileStream(fileName, FileMode.Append, FileAccess.Write))
using (StreamWriter sw = new StreamWriter(fs))
{
sw.WriteLine(href);
}
问题在于期待DocumentComplete事件。登录后的页面没有等待加载。为什么?点击登录按钮后,如何查看页面的ReadyState ?
如何为我所有的事件在页面导航?
我遇到了这个问题,并使用计时器解决了它。在InvokeMember("click");
之后,我启动一个计时器几秒钟,在计时器上我检查ReadyState
。如果完成-停止定时器,否则将再次触发。
System.Windows.Forms.Timer yesTimer;
yesTimer.Interval = 2000;
public Main()
{
webBrowser1.Navigate("http://www.mysite.com");
yesTimer.Start();
}
private void yesTimer_Tick(object sender, EventArgs e)
{
if (webBrowser1.ReadyState != WebBrowserReadyState.Complete)
{
return;
}
yesTimer.Stop();
//do here whatever you want then webBrowser1 is completed
}