我有一个带浏览器控件的表单。 (此控件使用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工具和数据库网站用于研究目的。
答案 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。这个解决方案工作正常:)