Selenium 不使用默认 Chrome 配置文件

Posted

技术标签:

【中文标题】Selenium 不使用默认 Chrome 配置文件【英文标题】:Selenium not using Default Chrome Profile 【发布时间】:2021-03-12 23:25:02 【问题描述】:

Selenium 不会加载我的默认 Chrome 配置文件,我不知道为什么。我已经尝试过配置文件 1 和默认配置文件,但出现相同的错误(如下)。我已通过任务管理器确认所有 Chrome 窗口在运行此代码之前都已关闭。有什么想法吗?

from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import numpy as np
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
import os
os.system("taskkill /f /im geckodriver.exe /T")
os.system("taskkill /f /im chromedriver.exe /T")
os.system("taskkill /f /im IEDriverServer.exe /T")
os.system("taskkill /f /im chrome.exe /T")

driver2 = r"C:\Users\xxx\.wdm\drivers\chromedriver\87.0.4280.20\win32\chromedriver.exe"
options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=C:\\Users\xxx\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1")
driver = webdriver.Chrome(executable_path=driver2, chrome_options=options)
driver.get("https://www.google.co.in")

Traceback (most recent call last):
  File "C:\Users\xxx\OneDrive\Python\pyReportRun.py", line 16, in <module>
    driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
  File "C:\Python38\lib\site-packages\selenium\webdriver\chrome\webdriver.py", line 76, in __init__
    RemoteWebDriver.__init__(
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
    self.start_session(capabilities, browser_profile)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in start_session
    response = self.execute(Command.NEW_SESSION, parameters)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
    self.error_handler.check_response(response)
  File "C:\Python38\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: Could not remove old devtools port file. Perhaps the given user-data-dir at C:\Users\xxx\AppData\Local\Google\Chrome\User Data\Profile 1 is still attached to a running Chrome or Chromium process

【问题讨论】:

【参考方案1】:
chrom_options.add_argument("user-data-dir=C:\\Users\robert.car\\AppData\\Local\\Google\\Chrome\\User Data")

chrom_options.add_argument("profile-directory=Profile 1")

user-data-dir 将 profile 视为默认值,您不必指定它。如果是其他东西,则通过 profile-directory 参数指定它

创建个人资料的步骤:

打开:地址栏中的 chrome://version

复制用户目录文件夹完全到例如c:\tmp\newdir

打开复制的用户数据 (newdir) 并搜索名为 Default 的文件夹。这是个人资料文件夹。

重命名默认文件夹为“Profile 1”

现在使用这个:

chrom_options.add_argument("user-data-dir=c:\\tmp\\newdir")

chrom_options.add_argument("profile-directory=Profile 1")

【讨论】:

添加此内容时,我仍然看不到我的个人资料。浏览器仍未登录,chrome//version 显示如下:C:\Users\ROBERT~1.CAR\AppData\Local\Temp\scoped_dir45504_1195749914\Profile 1 你添加了什么,添加你使用的脚本 您应该将用户目录添加为 C:\Users\ROBERT~1.CAR\AppData\Local\Temp\scoped_dir45504_1195749914 并将配置文件目录添加为配置文件 1 抱歉,这会有所帮助...我试过:options.add_argument("profile-directory=Profile 1") 和 options.add_argument("profile-directory=C:\\Users\robert .car\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1") 更新了答案,同时使用用户目录和配置文件作为 showm【参考方案2】:

此错误消息...

selenium.common.exceptions.WebDriverException: Message: unknown error: Could not remove old devtools port file. Perhaps the given user-data-dir at C:\Users\xxx\AppData\Local\Google\Chrome\User Data\Profile 1 is still attached to a running Chrome or Chromium process

...暗示 ChromeDriver 无法启动/生成新的浏览上下文,即 Chrome 浏览器 会话为user-data-dir您传递的参数仍然附加到正在运行的 Chrome 浏览上下文


详情

Default Chrome Profile 用于自动化测试将违反所有最佳实践,因为默认 Chrome 配置文件可能包含以下:

浏览器设置 扩展 书签 应用程序 保存的密码 浏览历史记录 等

因此,默认 Chrome 配置文件 可能不符合您的测试规范,并且在尝试加载时可能偶尔会引发异常。因此,您应该始终使用自定义 Chrome 配置文件

您可以在How to open a Chrome Profile through --user-data-dir argument of Selenium找到详细讨论

如果您的用例仍需要使用 默认 Chrome 配置文件,您需要确保所有 google-chrome、chromium 或 selenium-chromedriver 都已停止/终止您可以按照下面提到的详细信息进行操作。

在这里你可以找到关于Selenium : How to stop geckodriver process impacting PC memory, without calling driver.quit()?的详细讨论


默认 Chrome 配置文件的位置

根据How to Find Your Chrome Profile Folder on Windows, Mac, and Linux 中的文档,Chrome 默认配置文件文件夹的位置因您的平台而异。地点是:

Windows 7、8.1 和 10C:\Users\&lt;username&gt;\AppData\Local\Google\Chrome\User Data\Default Mac OS X El CapitanUsers/&lt;username&gt;/Library/Application Support/Google/Chrome/Default Linux/home/&lt;username&gt;/.config/google-chrome/default

您需要将&lt;username&gt; 替换为您的用户文件夹的名称。默认配置文件文件夹简单地命名为 Default(或 Linux 中的 default)。但是,如果您创建了其他配置文件,它们的文件夹名称就不那么明显了。创建配置文件时分配给配置文件的名称显示在 Chrome 窗口标题栏右侧的名称按钮上。不幸的是,Chrome 在相关配置文件文件夹中使用的名称是一个通用的编号名称,例如 Profile 3

如果您需要知道任何 Chrome 配置文件的文件夹名称,您只需在地址栏中访问 chrome://version 并按 Enter。

快照:

Profile Path 显示当前配置文件的位置。例如,我的 Windows 10 系统中的 Default 配置文件的位置是 C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\Default。您可以选择路径并将其复制并粘贴到 Windows 中的文件资源管理器、OS X 上的 Finder 或 Linux 中的文件管理器(如 Nautilus)中以访问该文件夹。


示例代码(Windows 10)

最后,要访问 默认 Chrome 配置文件,您可以使用以下基于 Python 的解决方案:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\\Users\\username\\AppData\\Local\\Google\\Chrome\\User Data\\Default")
driver = webdriver.Chrome(executable_path=r'C:\WebDrivers\chromedriver.exe', chrome_options=options)
driver.get("https://www.google.co.in")

您可以在How to use Chrome Profile in Selenium Webdriver Python 3找到详细讨论

【讨论】:

我不是想引用我的默认配置文件,而是引用 C:\Users\robert.car\AppData\Local\Google\Chrome\User Data\Profile 1 给出的配置文件 1。我们是每当我们像这样添加配置文件时都会收到错误:options.add_argument("profile-directory=Profile 1") @RCarmody 保持简短甜美和简单。从chrome://version 中提取Profile Path 并传递user-data-dir 参数。 这就是我最初的......摆脱配置文件目录步骤,我只有以下内容:options.add_argument("user-data-dir=C:\\Users\robert. car\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1") 并得到相同的错误 @RCarmody 您是否可以手动访问Profile 1,即使用Chrome Profile 1 并访问chrome://versionProfile Path 显示 C:\Users\robert.car\AppData\Local\Google\Chrome\User Data\Profile 1? 是的,这是正确的。我直接从 chrome://version 复制了这条路径,然后将 \ 调整为 \\

以上是关于Selenium 不使用默认 Chrome 配置文件的主要内容,如果未能解决你的问题,请参考以下文章

Selenium加载Chrome/Firefox浏览器配置文件

Selenium 加载Chrome/Firefox浏览器配置文件

转Selenium 加载Chrome/Firefox浏览器配置文件

如何在 Selenium Webdriver Python 3 中使用 Chrome 配置文件

Selenium chrome配置不加载图片Python版

Selenium chrome配置不加载图片