2012-04-15 95 views
3

我使用C#WebBrowswer控制和我有当页面没有加载当按下像“下一步”按钮的问题尚未程序试图进行,而是给了我一个空错误。等到WebBrowser控件的页面加载

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

我试图把程序中的while循环检查html页面的标题,但程序死机。喜欢的东西将冻结程序:

while(!webbrowser1.Document.Title.ToString().Equals("NextPageTitle")) 
    { 
    } 
    ::NextCommands:: 

它不工作,我想,和按钮“fblqf”不点击。但它不是返回空的错误..

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"); 
} 

解决方案:

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(); 
} 

回答

1

我发现了一个简单的解决方案!

public void button1_Click(object sender, EventArgs e) 
{ 
    webBrowser1.Document.GetElementById("q").SetAttribute("value", "חחח"); 
    webBrowser1.Document.GetElementById("btnK").InvokeMember("Click"); 

    while (true) 
    { 
     System.Windows.Forms.Application.DoEvents(); 
     if(webBrowser1.Document.GetElementById("pnnext") != null) 
     break; 
    } 

    webBrowser1.Document.GetElementById("pnnext").InvokeMember("Click"); 
    webBrowser1.Document.GetElementById("q").Focus(); 
} 
+2

你真的需要那个x吗?无法在while条件内放置webBrowser1.Document.GetElementById(“pnnext”)== null吗? – Puce 2014-03-07 09:20:52

+0

你可能是正确的,因为你可以看到,这是我的第一段代码之一。 – hagai 2017-12-12 11:57:16

7

您需要挂钩WebBrowswer.DocumentCompleted事件:

也许在你的构造函数或元素的onload:

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

然后你的活动看起来像这样:

void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    // do the work you need to do now that that page has completed loading 
} 
+0

我增加了一些更多的代码来说明问题 – hagai 2012-04-19 00:36:30

+0

@ user1335131,我已经更新了我的代码。在尝试加载下一个网页之前,您应该设置您的事件处理程序。 – 2012-04-19 14:10:59

+0

我试过了,还是同样的问题 – hagai 2012-04-20 22:07:49