等到webbrowser控件中的页面加载

hag*_*gai 3 c# browser

我正在使用C#WebBrowswer控件,我有一个问题,当页面未加载时按下像"下一步"这样的按钮但程序试图继续但是反过来给我一个空错误.

是否有一个函数让程序等到页面完成加载?

我试图在程序中放一个while循环来检查html页面的标题,但程序冻结了.会像冻结程序一样:

    while(!webbrowser1.Document.Title.ToString().Equals("NextPageTitle"))
   {
   }
   ::NextCommands::
Run Code Online (Sandbox Code Playgroud)

它没有用,我试过了,没有点击按钮"fblqf".但它不返回null错误..

public void button1_Click(object sender, EventArgs e)
{



    webBrowser1.Document.GetElementById("q").SetAttribute("value", "???");
    webBrowser1.Document.GetElementById("btnK").InvokeMember("Click");
    webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;


}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // do the work you need to do now that that page has completed loading
    webBrowser1.Document.GetElementById("fblqf").InvokeMember("Click");
}
Run Code Online (Sandbox Code Playgroud)

解:

public void button1_Click(object sender, EventArgs e)
{
    webBrowser1.Document.GetElementById("q").SetAttribute("value", "???");
    webBrowser1.Document.GetElementById("btnK").InvokeMember("Click");
    int x=0;
    while (x==0)
   {
       System.Windows.Forms.Application.DoEvents();
        if(webBrowser1.Document.GetElementById("pnnext") != null)
        break;
   }

    webBrowser1.Document.GetElementById("pnnext").InvokeMember("Click");
    webBrowser1.Document.GetElementById("q").Focus();
}
Run Code Online (Sandbox Code Playgroud)

Bra*_*Rem 7

您需要挂钩WebBrowswer.DocumentCompleted事件:

也许在你的构造函数或你的OnLoad中:

webBrowser1.Document.GetElementById("q").SetAttribute("value", "???"); 
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
webBrowser1.Document.GetElementById("btnK").InvokeMember("Click"); 
Run Code Online (Sandbox Code Playgroud)

然后你的事件看起来像这样:

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    // do the work you need to do now that that page has completed loading
}
Run Code Online (Sandbox Code Playgroud)