在Chrome中,有一个严格的站点隔离设置,可以在chrome:// flags / #enable-site-per-process页面中手动启用。我在尝试使用WebDriver C#绑定测试Chrome时尝试启用此标记,但它未启用。
交换机列在https://peter.sh/experiments/chromium-command-line-switches/中,因此我尝试将其添加为ChromeOptions中的参数,但这没有任何效果。
ChromeOptions options = new ChromeOptions();
options.AddArgument("--site-per-process");
IWebDriver driver = new ChromeDriver(@"c:\browserdrivers",options);
driver.Navigate().GoToUrl("www.google.com");
driver.Quit();
我也尝试根据https://chromium.googlesource.com/chromium/src/+/master/chrome/common/pref_names.cc
中列出的设置将其设置为偏好设置options.AddUserProfilePreference("site_isolation.site_per_processs", true);
但这也不起作用。
有谁知道如何启用它?
答案 0 :(得分:0)
我们正在使用PS脚本部署此更改,以便在Windows上编辑本地状态文件%AppDataLocal%\ Google \ Chrome \ User Data
脚本有点基本,但会为我们完成工作。最好使用GPO选项,但不幸的是,它仅适用于Chrome 63及更新版本。
$USRPROF = Get-Childitem env:APPDATA | %{ $_.Value }
$ChromeLocalState = (Get-item $USRPROF).parent.FullName + "\Local\Google\Chrome\User Data\Local State"
#original (Get-Content $ChromeLocalState) | Foreach-Object {$_ -replace '{"browser":{"last_redirect_origin"', '{"browser":{"enabled_labs_experiments":["enable-site-per-process"],"last_redirect_origin"'} | Set-Content $ChromeLocalState
#add site-per-process setting. Ok if it doubles the same nested statement. Chrome will parse it out.
(Get-Content $ChromeLocalState) | Foreach-Object {$_ -replace 'last_redirect_origin', 'enabled_labs_experiments":["enable-site-per-process"],"last_redirect_origin'} | Set-Content $ChromeLocalState
答案 1 :(得分:-1)
基于Fiddles代码,这个版本解决了我在测试中发现的几个问题。必须以登录用户身份运行。请参阅最后的注释。
"当地国家" json文件保存' enable-site-per-process'的每用户设置。启用此实验设置的配置项
使用本地系统环境变量获取用户C:\ Users \ UserID \ Appdata \ Local文件夹
$USRPROF = Get-Childitem env:LOCALAPPDATA
在该文件夹下是'\Google\Chrome\User Data'
文件夹,其中包含我们需要修改的'Local State'
文件
$ChromeLocalState = -Join($USRPROF.Value.ToString(),'\','Google\Chrome\User Data\Local State')
停止Chrome
Stop-Process -Name chrome -Force -ErrorAction SilentlyContinue
添加每个进程的站点设置。好吧,如果它加倍相同的嵌套语句。 Chrome会解析它。
(Get-Content $ChromeLocalState) | Foreach-Object {$_ -replace 'last_redirect_origin', 'enabled_labs_experiments":["enable-site-per-process"],"last_redirect_origin'} | Set-Content $ChromeLocalState
查找已安装的Chrome版本并启动它
Switch($TRUE) {
{Test-Path 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'} {Start-Processs -FilePath 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe' }
{Test-Path 'C:\Program Files\Google\Chrome\Application\chrome.exe'} {Start-Processs -FilePath 'C:\Program Files\Google\Chrome\Application\chrome.exe' }
}
测试期间的观察
如果此脚本在'本地状态'中启动了值,则Chrome正在运行文件已生效但未生效。 如果Chrome已关闭,则“本地状态”将被关闭。文件被内存中的信息覆盖,设置为Removed !!
因此,为了最大限度地利用此脚本,脚本已被修改为 1.停止Chrome 2.更改设置 3.重新启动Chrome
重新启动Chrome是可选的,系统会要求用户恢复打开的标签页,因为Chrome会以非标准方式终止。
进一步观察到,即使chrome在后台,也会不断修改本地状态文件 这是首先停止镀铬的另一个原因。