我正在使用Selenium WebDriver for Chrome同时打开两个不同配置文件(配置文件1和配置文件2)的两个Google Chrome实例。 Profile 1的第一个实例成功打开。但是,当我尝试使用配置文件2打开Chrome的第二个实例时,我收到错误。
这是我的Python代码:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
#Profile Directory for Google Chrome
dataDir = "--user-data-dir=C:\\Users\\Myname\\AppData\\Local\\Google\\Chrome\\User Data"
#Setting the Chrome options for Profile 1
chrome_options1 = Options()
chrome_options1.add_argument(dataDir)
chrome_options1.add_argument("--profile-directory=Profile 1")
driver1 = webdriver.Chrome(chrome_options=chrome_options1)
#This opens www.google.com sucessfully
driver1.get('https://www.google.com')
#Setting the Chrome options for Profile 2
chrome_options2 = Options()
chrome_options2.add_argument(dataDir)
chrome_options2.add_argument("--profile-directory=Profile 2")
#The below line throws an error (Cannot move the Shared Cache)
driver2 = webdriver.Chrome(chrome_options=chrome_options2)
#This line is not reached as there is error in creating driver2 itself
driver2.get('https://www.google.com')
这是我得到的错误:
[1076:11808:0716/182552:ERROR:cache_util_win.cc(20)] Unable to move the cache: 0
[1076:11808:0716/182552:ERROR:cache_util.cc(134)] Unable to move cache folder C:
\Users\Myname\AppData\Local\Google\Chrome\User Data\ShaderCache\GPUCache to C:\U
sers\Myname\AppData\Local\Google\Chrome\User Data\ShaderCache\old_GPUCache_000
[1076:11808:0716/182552:ERROR:cache_creator.cc(129)] Unable to create cache
[1076:11808:0716/182552:ERROR:shader_disk_cache.cc(589)] Shader Cache Creation failed: -2
我认为错误是因为第一个chrome实例已锁定共享缓存文件夹(用于写入)。因此,当第二个实例尝试打开相同的共享文件夹时,它会抛出错误。
有没有解决方法呢?
我的目标是同时打开两个不同配置文件的Chrome实例。
任何帮助都是赞赏的。
答案 0 :(得分:4)
我不知道这是否仍然与您相关,如果我使用Python时我的解决方案也适合您,而我使用R。
我已经使用带有Chrome网络驱动程序的RSelenium软件包在R中编写了自动网络抓取代码。就像你一样,我想同时使用谷歌浏览器的多个实例与不同的谷歌浏览器配置文件,说"配置文件1"和"个人资料2",我相应地在Google Chrome中创建了它们。 R让我轻松打开一个带有两个配置文件之一的硒网络驱动程序,例如: "简介1" (记住这是R):
# Define profile directory:
prof1 <- getChromeProfile("~/Users/<username>/AppData/Local/Google/Chrome/User Data", "Profile 1")
#Set up remote driver with according chrome profile (prof1):
remDr <- remoteDriver(browserName = "chrome", extraCapabilities = prof1)
#Open remote driver:
remDr$open()
...但从不同时使用Google Chrome个人资料。确切地说,只要我用第二个配置文件打开第二个chrome实例,即&#34;配置文件2&#34;,我的控制台以及两个网络驱动程序都冻结了,并且不再恢复。
我的解决方案:
解决方案非常简单:我将谷歌浏览器配置文件夹(&#34;配置文件1和#34;以及&#34;配置文件2&#34;)从默认位置(谷歌浏览器创建它们)移动到我的计算机上的不同目录,并将它们存储在新创建的父文件夹中。让我举个例子:
默认的Google Chrome个人资料位置(&#34;个人资料1&#34;以及&#34;个人资料2&#34;,由Google Chrome创建):
"~/Users/<username>/AppData/Local/Google/Chrome/User Data/Profile 1"
"~/Users/<username>/AppData/Local/Google/Chrome/User Data/Profile 2"
我把它们移到我的&#34;文件&#34;文件夹到新的父文件夹:
"~/Users/<username>/Documents/Google Chrome Profile 1/Profile 1"
"~/Users/<username>/Documents/Google Chrome Profile 2/Profile 2"
新文件夹&#34; Google Chrome Profile 1&#34;和&#34;谷歌浏览器配置文件2&#34;是前面提到的父文件夹。
为什么这样做?
在我看来,默认的Google Chrome不仅会使用相应个人资料文件夹中的个人资料信息,还会使用&#34; shared&#34;父文件夹中的位置。如果两个(或更多)配置文件从这样的共享文件夹运行信息,它可能会变得混乱,相应的Web驱动程序卡住并且控制台抛出错误。
这就是为什么在新位置我将个人资料文件夹保存在新的父文件夹&#34; Google Chrome个人资料1&#34;和&#34;谷歌Chrome Profile 2&#34;。像这样,我设法运行4个具有不同配置文件的独立chrome实例(所有这些实例都有自己的cookie和历史记录)。
我希望这适合你。