【问题标题】:Wait until page loads in webbrowser control等到网页浏览器控件中的页面加载
【发布时间】:2012-04-27 08:08:54
【问题描述】:

我正在使用 C# 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();
}

【问题讨论】:

    标签: c# browser


    【解决方案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();
    }
    

    【讨论】:

    • 你真的需要那个 x 吗?你能把 webBrowser1.Document.GetElementById("pnnext") == null 放在 while 条件中吗?
    • 你可能是对的,你可以看到这是我的第一段代码。
    【解决方案2】:

    你需要挂钩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
    }
    

    【讨论】:

    • @user1335131,我已经更新了我的代码。您应该在尝试加载下一个网页之前设置您的事件处理程序。
    • 很有趣,起初我很想说这应该是答案,但我又看了看,认为如果页面中的元素是由启动创建的,他可能有一个有效的解决方案来解决可能发生的问题脚本,直到 DocumentCompleted 事件发生一段时间后才存在。
    猜你喜欢
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2013-05-19
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多