我为我的C#项目使用WebBrowser控件。我尝试集成GeckoFX而不是WebBrowser。因为我总是在WebBrowser中更改输入,所以我必须等到网站完全加载。这就是为什么,我使用以下方法:
private void navigateBrowser(string URL)
{
wb.Navigate(URL);
while (wb.ReadyState != WebBrowserReadyState.Complete)
{
Thread.Sleep(1);
Application.DoEvents();
}
}
我已经为GeckoFX更改了这个方法,如下所示: private void navigateBrowser(string URL)
private void navigateBrowser(string URL)
{
wb.Navigate(URL);
while (wb.Document.ReadyState != "complete")
{
Application.DoEvents();
}
while (wb.IsBusy)
{
Application.DoEvents();
}
}
我调用navigateBrowser(“http://facebook.com”),然后填写表单进行登录。提交表单后,我必须登录另一个网站(在linkedin.com中)我再次调用navigateBrowser(“http://linkedin.com”),当尝试从geckowebbrowser调用一些元素时,我收到错误“对象”引用未设置为对象的实例。“我检查了geckowebbrowser的实际网址,它仍然是facebook.com,但我应该是linkedin.com,因为我打电话给linkedin.com。
可能是什么问题?我该如何解决这个问题?
答案 0 :(得分:0)
使用webbrowser的DocumentCompleted事件。
因此,举例来说 - 您的应用中有一个按钮可以导航到特定的网页,还有一个方法可以在加载后读取该页面。
因此,在DocumentCompleted事件hanlder中,调用该方法 - 这将确保页面已经加载。
在页面加载时等待Application.DoEvents()循环不是一个好主意。例如,如果在循环期间某些内容关闭/崩溃应用程序,它仍然会运行并且不会关闭。
此致