【问题标题】:WebBroswer_DocumentCompleted event is not workingWebBroswer_DocumentCompleted 事件不起作用
【发布时间】:2012-09-17 11:04:19
【问题描述】:

我有一个带有浏览器控件的表单。 (此控件使用 IE9,因为我在注册表编辑器上设置了值)

此网络浏览器导航到特定的 URL 并填写 HTML 页面上的所有字段并提交,然后显示结果页面。 我的问题是我只想知道这个 reslut 页面何时完全加载或完成,以便我可以获取一些信息。 我使用 WebBroswer_DocumentCompleted 事件,该事件适用于第一页,但不适用于结果页面,因为它在结果之前触发 页面已加载。

我尝试了其他解决方案,即检查结果页面中的 div 标签(该标签仅在结果页面完全加载时出现),它可以工作但并非总是如此。

我的代码:

private void WebBroswer_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    { 

        HtmlElementCollection elc3 = this.BotBrowser.Document.GetElementsByTagName("div");
        foreach (HtmlElement el in elc3)
        {
            if (el.GetAttribute("id").Equals("Summary_Views")) //this determine i am at the result page
            {
               // fetch the result
            }
        }}

那个 div id 是“Summary_Views”。 我可以根据需要为您提供该网站的链接,该链接仅供 BLAST 工具和数据库网站用于研究目的。

【问题讨论】:

    标签: c# html visual-studio-2010 bots


    【解决方案1】:

    Frames 和 IFrames 将导致此事件多次触发。看看这个答案:
    HTML - How do I know when all frames are loaded?

    或者这个答案:
    How to use WebBrowser control DocumentCompleted event in C#?

    或者ms的kb文章: http://support.microsoft.com/kb/180366

    【讨论】:

      【解决方案2】:

      你知道有没有框架吗?如果是这样,请说出来,以便人们可以提供帮助。如果没有,那么就说出来,这样人们就可以提供替代方案。

      我的猜测是内容是由 JavaScript 生成的。如果是,那么文档在 JavaScript 执行之前就完成了,您需要以某种方式等到 JavaScript 完成。解决方案取决于网页。因此,您可能需要处理多个文档完成以进行诊断,并尝试确定是否有办法知道您需要哪个。

      【讨论】:

      • 我同意你的观点,所以我认为即使在 DocumentComplted 事件被触发后,我也应该等待页面完全加载。那我怎么能等?我使用 Thread.Sleep() 函数,但它也停止了页面和代码的整个加载。
      • 我已经创建了一个函数来查找这个 Div 标签并将这个函数分配给一个新线程(通过使用 ThreadStart 委托)。我只想启动这个新线程并让它在 DocumentCompleted 后休眠几秒钟为结果页面触发事件,以便我可以轻松找到 Div 标签。
      • 我对 Stackoverflow 比较陌生,所以之前没有注意到这个回复。有一种非常简单的方法可以为 DocumentComplete 事件创建处理程序;只需双击设计器中的 WebBrowser 控件。 DocumentComplete 事件是 WebBrowser 控件设计器中的默认事件。
      • 是的,我已经这样做了。但我的问题是每次页面加载都会触发此事件 2 次,但主要的痛苦是该事件更早触发,然后结果页面完全加载。但现在我已经解决了我的问题,而且我的基因研究机器人做得很好:)
      【解决方案3】:

      我终于解决了我的问题。我从工具箱中放置了一个计时器控件,并将其时间间隔设置为 200 毫秒,并将其 Autoreset 属性设置为 false。我设置了一个滴答事件,它的代码每 200 毫秒检查一次是否已加载此 Div,之后,自动重置属性设置为 true。此解决方案运行良好:)

      【讨论】:

        猜你喜欢
        • 2013-05-19
        • 2018-04-01
        • 2020-11-26
        • 2015-11-08
        • 2018-07-09
        • 2016-04-18
        • 2014-01-29
        • 2013-01-11
        • 2019-01-27
        相关资源
        最近更新 更多