WebBroswer_DocumentCompleted事件无效

时间:2012-09-25 21:23:16

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

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

此Web浏览器导航到特定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工具和数据库网站用于研究目的。

3 个答案:

答案 0 :(得分:1)

帧和IFrame会导致此事件多次触发。看看这个答案:
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

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

最后我解决了我的问题。我从工具箱中放了一个定时器控件,并将其时间间隔设置为200ms,并将其Autoreset属性设置为false。我设置了一个tick事件,它有一个代码来检查每个200ms是否已经加载了这个Div,之后,Autoreset属性被设置为true。这个解决方案工作正常:)