无法使用适用于Python的Chrome的selenium Web驱动程序打开具有不同配置文件的两个Google Chrome实例

时间:2016-07-16 13:31:56

标签: python-2.7 google-chrome selenium webdriver

我正在使用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实例。

任何帮助都是赞赏的。

1 个答案:

答案 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和历史记录)。

我希望这适合你。