Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#网络浏览器导航冻结_C#_.net_Web_Browser - Fatal编程技术网

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的反馈有帮助吗?