python-2.7 - 无法在 Python 中使用适用于 Chrome 的 selenium 网络驱动程序打开两个具有不同配置文件的 Google Chrome 实例

标签 python-2.7 google-chrome selenium webdriver

我正在使用适用于 Chrome 的 Selenium WebDriver 同时打开两个具有两个不同配置文件(配置文件 1 和配置文件 2)的 Google Chrome 实例。具有配置文件 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 实例。

感谢任何帮助。

最佳答案

我不知道这是否仍然与您相关,我的解决方案是否也适用于您,因为您使用的是 Python 而我使用的是 R。

我使用 RSelenium 包和 Chrome 网络驱动程序在 R 中编写了自动网络抓取代码。就像你一样,我想同时使用具有不同 Google Chrome 配置文件的多个 Google Chrome 实例,比如“配置文件 1”和“配置文件 2”,我相应地在 Google Chrome 中创建了它们。 R 让我使用两个配置文件之一轻松打开一个 selenium 网络驱动程序,例如“配置文件 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 配置文件。准确地说,当我用第二个配置文件(即“配置文件 2”)打开第二个 chrome 实例时,我的控制台以及两个网络驱动程序都卡住了并且不再恢复。

我的解决方案:

解决方案非常简单:我将 Google Chrome 配置文件文件夹(“配置文件 1”和“配置文件 2”)从它们的默认位置(谷歌浏览器创建它们的位置)移动到我计算机上的不同目录,并将它们存储在新创建的父文件夹。让我举个例子:

默认的谷歌浏览器配置文件位置(“配置文件 1”和“配置文件 2”,由谷歌浏览器创建):

"~/Users/<username>/AppData/Local/Google/Chrome/User Data/Profile 1"
"~/Users/<username>/AppData/Local/Google/Chrome/User Data/Profile 2"

我将它们移动到我的“文档”文件夹到新的父文件夹中:

"~/Users/<username>/Documents/Google Chrome Profile 1/Profile 1"
"~/Users/<username>/Documents/Google Chrome Profile 2/Profile 2"

新文件夹“Google Chrome Profile 1”和“Google Chrome Profile 2”是之前提到的父文件夹。

为什么会这样?

在我看来,默认情况下,Google Chrome 浏览器不仅使用来自各个配置文件文件夹的配置文件信息,还使用来自父文件夹中“共享”位置的配置文件信息。如果两个(或更多)配置文件运行来自此类共享文件夹的信息,它可能会变得困惑,相应的网络驱动程序会卡住并且控制台会抛出错误。

这就是为什么在新位置我将配置文件文件夹保存在新的父文件夹“Google Chrome Profile 1”和“Google Chrome Profile 2”中。像这样,我设法并行运行 4 个具有不同配置文件的独立 chrome 实例(它们都有自己的 cookie 和历史记录)。

我希望这对你有用。

关于python-2.7 - 无法在 Python 中使用适用于 Chrome 的 selenium 网络驱动程序打开两个具有不同配置文件的 Google Chrome 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38411728/

相关文章:

python - 如何使用带有下拉菜单的 Selenium 来抓取历史数据?

python-2.7 - python Pandas : set a value of column based on another value of a column in a list

python - 如何使用 reduce with list of lists

javascript - Twitter Bootstrap 2.3 Typeahead 搜索元素名称与字符 & 在谷歌浏览器中

javascript - 扩展内容脚本仅打开约 :blank

testing - 在 Selenium 中存储动态文本

python - 检查一组字典是否都等于 false 的最快方法是什么?

python - 使用正则表达式过滤列表

javascript - Chrome 在触摸板上点击会触发 mouseleave

selenium - 无法使用浏览器堆栈运行我的 Selenium 代码