1

我有一个带有浏览器控件的表单。(此控件使用 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 工具和数据库网站用于研究目的。

4

3 回答 3

1

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

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

于 2012-09-25T22:33:29.487 回答
1

Frames 和 IFrames 将导致此事件多次触发。看看这个答案:
HTML - 我如何知道所有帧何时加载?

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

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

于 2012-09-25T21:27:55.827 回答
1

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

于 2012-10-03T21:44:31.710 回答