WebBrowser 控制、隔离和 IE8 InPrivate 模式

Posted

技术标签:

【中文标题】WebBrowser 控制、隔离和 IE8 InPrivate 模式【英文标题】:WebBrowser control, isolation and IE8 InPrivate mode 【发布时间】:2010-12-08 08:35:06 【问题描述】:

我需要在 Web 浏览器控件中运行一些自动化任务,但我似乎面临一些限制/未知因素,我不能 100% 确定如何解决。我正在运行的应用程序不是公开发布的,所以我可以强制安装 IE8 的先决条件。

GeckoFX (http://geckofx.org) 会很棒,但它没有像我在 htmlElement 对象上使用 WebBrowser 的 InvokeMember 方法那样为我提供一种可接受的 DOM 操作方式。

WebKit.net 会更好,但它的开发还为时过早,无法提供我需要的功能。

这给我留下了 WebBrowser 控件。不过,WebBrowser 的问题在于它只运行 IE,这是一个包含所有进程的大型共享环境。换句话说,所有实例共享 cookie、会话、代理设置等。

这就是我想要的:

在自动化会话结束时,不会保留 cookie/会话/缓存对象。除了清除全局 Temporary Internet Files 文件夹之外,有没有办法让我访问 IE8 暴露的 InPrivate 模式?

如果有办法访问 InPrivate 浏览,我是否可以并排运行两个相互隔离的 InPrivate 模式会话?

理想情况下,我希望能够在单独的线程中运行多个隔离的自动化任务,每个线程都有自己的私有浏览器控件,每个都有自己的隔离会话/环境,任务完成时不会保留。

对此的任何帮助或意见将不胜感激!

【问题讨论】:

您是指 Windows 窗体 WebBrowser 控件、WPF 还是什么? 嗨,很抱歉,这并没有提供任何帮助,但是“WebBrowser 虽然它只是运行 IE,这是一个与所有进程共享的大型共享环境。换句话说,所有实例共享cookie、会话、代理设置等”你是从哪里收集到这些信息的?据我了解,WebBrowser 不会与其他进程共享其 cookie... 【参考方案1】:

不,您不能在 InPrivate 模式下运行 WebBrowser 控件;这根本不是受支持的场景。

是的,您可以在 InPrivate 模式下运行两个 IE 实例并将它们相互隔离。

使用命令行:iexplore.exe -private -nomerge

【讨论】:

【参考方案2】:

这里有一些代码可以让你访问 InPrivate IE

Friend Function Open(Optional ByVal Url As String = "about:blank", Optional ByVal WindowState As ProcessWindowStyle = ProcessWindowStyle.Hidden) As WebBrowser
On Error Resume Next

Dim Start As New ProcessStartInfo
Dim Windows = New ShellWindowsClass
Dim Count = Windows.Count
Start.FileName = "iexplore.exe"
Start.Arguments = "-private -nomerge " & Url
If WindowState = ProcessWindowStyle.Hidden Then
  Start.WindowStyle = ProcessWindowStyle.Minimized
Else
  Start.WindowStyle = WindowState
End If
Process.Start(Start)

Wait.Reset()
Do
  If Windows.Count > Count Then Exit Do
Loop While Wait.Waiting

Browser = Windows(Count)
Browser.Visible = (WindowState <> ProcessWindowStyle.Hidden)
Return Browser
End Function

【讨论】:

以上是关于WebBrowser 控制、隔离和 IE8 InPrivate 模式的主要内容,如果未能解决你的问题,请参考以下文章

WebBrowser引用IE版本问题,更改使用高版本IE

调整WebBrowser的默认浏览器内核版本

使用 IE9 的 WebBrowser 控件

用 IE8 设计文件输入按钮

webbrowser 控件实现WinForm与WebForm交互

关于 C# WebBrowser 行为与本机 IE 或 Edge 行为不一致问题