我正在编写一个程序,可以浏览包含多个框架的网站。我正在使用WinForms webBrowser控件。
我有一个用Visual Basic脚本编写的相同程序,在这里我使用下面的代码作为子程序,以确保在尝试调用点击事件等之前加载了所有内容。
Sub CheckIfLoaded
Do while appIE.Busy = True OR appIE.ReadyState <> 4 : Wscript.Sleep(100) : Loop
End Sub
我在C#中寻找类似的东西。我不认为WebBrowswer.DocumentCompleted事件是这里的解决方案,因为据我了解它的用法,我必须在大量{{1}中将整个代码放入一个webBrowser1_DocumentCompleted
方法中}陈述,这似乎是错误的。
伪代码是:
if
在我的代码中有很多这样的程序(例如,用于登录,导航到选定页面,填写表单,设置选项,生成报告),所以我想有一个简单的事情就是确保在尝试访问其元素之前加载页面,就像我在vbs中一样。
我尝试了以下两种解决方案: (在第一个中,应用程序永远不会加载页面)
private void DoOneSpecificThing (string[] ListOfThings)
{
foreach (string ID in ListOfThings)
{
open webbrowser and navigate to page;
CheckIfLoaded();
Log In and load the first page;
CheckIfLoaded();
Tick a bunch of tickboxes, write in textboxes etc;
Submit;
CheckIfLoaded();
Go to the next page;
CheckIfLoaded();
And do more stuff;
Submit;
}
}
(在第二种情况下,应用程序实际上并没有等待页面加载,所以我倾向于得到空引用错误和这种东西 int counter = 0;
while (webBrowser.ReadyState != WebBrowserReadyState.Complete)
{
counter += 1;
}
)
InvalidArgument=Value of 'nav' is not valid for 'windowId'.
帮助将不胜感激! 提前致谢
的Bartosz