C#网络浏览器导航冻结
我需要从一些网站抓取数据,但我目前陷入困境,无法解决一个严重的问题 当我登录其中一些网站时,用户仪表板将在新页面中打开。这就是问题的开始。我需要取消打开新页面,而是在同一C#网络浏览器导航冻结,c#,.net,web,browser,C#,.net,Web,Browser,我需要从一些网站抓取数据,但我目前陷入困境,无法解决一个严重的问题 当我登录其中一些网站时,用户仪表板将在新页面中打开。这就是问题的开始。我需要取消打开新页面,而是在同一WebBrowser实例中导航到该URL。我处理取消打开新页面如下 ... browser.AllowNavigation = true; (browser.ActiveXInstance as SHDocVw.WebBrowser_V1).NewWindow += new SHDocVw.DWebBrowserEvents_N
WebBrowser
实例中导航到该URL。我处理取消打开新页面如下
...
browser.AllowNavigation = true;
(browser.ActiveXInstance as SHDocVw.WebBrowser_V1).NewWindow += new SHDocVw.DWebBrowserEvents_NewWindowEventHandler(HandleBrowserNewWindow);
...
protected virtual void HandleBrowserNewWindow(string URL, int Flags, string TargetFrameName, ref object PostData, string Headers, ref bool Processed) {
Processed = true;
browser.Navigate(URL);
}
当WebBrowser
尝试打开新页面时,将调用HandleBrowserNewWindow
方法。但是,当我调用browser.Navigate(URL)
时,在我将处理的行设置为true
之后,WebBrowser
不会导航,而且它会冻结
为了调试,我为WebBrowser
的导航和DocumentCompleted
委托分配了方法。结果令人惊讶地可笑。以下是委托方法:
protected void BrowserDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
Console.WriteLine("Doc Completed: {0}", e.Url);
}
protected void BrowserNavigating(object sender, WebBrowserNavigatingEventArgs e)
{
Console.WriteLine("Navigating: {0}", e.Url);
}
这是我用于自动登录的一段代码:
...
browser.Navigate(LoginURL);
...
HtmlElement helUsername = browser.Document.GetElementById("username");
HtmlElement helPassword = browser.Document.GetElementById("password");
HtmlElement helLoginButton = browser.Document.GetElementById("btnLogin");
helUsername.Focus();
helUsername.SetAttribute("value", LoginUser);
helUsername.InvokeMember("change");
helUsername.RemoveFocus();
await Task.Delay(50);
helPassword.Focus();
helPassword.SetAttribute("value", LoginPass);
helPassword.InvokeMember("change");
helPassword.RemoveFocus();
await Task.Delay(50);
helLoginButton.InvokeMember("click");
以下是我得到的输出:
Navigating: https://someurl.com/Login
Doc Completed: https://someurl.com/Login
Navigating: https://someurl.com/Login
Doc Completed: https://someurl.com/Login
Navigating: https://someurl.com/Dashboard
正如您所看到的,登录页面被导航了两次,实际上我在代码中导航了一次。此外,WebBrowser
尝试导航到仪表板,但它只能导航到Navigating
<代码>网络浏览器
在那里冻结,文档永远无法完成
请帮我解决这个问题。这对我来说是非常重要的。这只是猜测,但我有一种感觉,浏览器不喜欢在导航过程中导航(在<代码> NeXWORK事件期间)。我会尝试保存URL并等待进程完成以完成新的导航。@ AHMET:Jacks的反馈有帮助吗?这只是一个猜测,但是我有一种感觉,浏览器不喜欢在导航过程中导航(在<代码> NeXWORK事件期间)。我会尝试保存URL并等待流程完成以进行新的导航。@Ahmet:Jacks的反馈有帮助吗?