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 模式的主要内容,如果未能解决你的问题,请参考以下文章