3

我正在尝试使用 selenium 在 python 中创建一个脚本,该脚本将打开一个网站并单击一个按钮。问题是我必须先关闭 chrome,然后才能运行脚本,否则我会收到此错误:

Message: invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

有没有办法解决这个问题,所以我不必在每次运行脚本之前关闭 chrome?

我的代码:

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

PATH = "C:\Program Files (x86)\chromedriver.exe"

options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=C:/Users/username/AppData/Local/Google/Chrome/User Data")
driver = webdriver.Chrome(executable_path=r'C:\Program Files (x86)\chromedriver.exe', chrome_options=options)
driver.get("https://disboard.org/sv/dashboard/servers")

link = driver.find_element_by_link_text("bump")
link.click()
4

3 回答 3

0

此错误消息...

invalid argument: user data directory is already in use, please specify a unique value for --user-data-dir argument, or don't use --user-data-dir

...意味着用户数据目录Default已在使用中,因此ChromeDriver无法访问该目录并启动/生成新的浏览上下文,即Chrome 浏览器会话。


解决方案

在这种情况下,您可以按照以下步骤添加/创建新的Chrome 配置文件并将其用于AUT(被测应用程序)

  • 打开谷歌浏览器,选择右上角的用户图标,然后点击添加

添加新的 Chrome 配置文件

  • 输入新人的姓名,选择一个图标来帮助代表这个新帐户,以便以后更容易找到。然后,选择添加。

Name_Shortcut_Done

桌面图标

  • Profile 1此外,您会发现旁边正在创建一个新的子目录Default

简介1

现在,您可以Profile 1按如下方式使用子目录:

options = Options()
options.add_argument("start-maximized")
options.add_argument("--profile-directory=Profile 1")
options.add_argument("--user-data-dir=C:/Users/user/AppData/Local/Google/Chrome/User Data")
driver = webdriver.Chrome(executable_path=r'C:\BrowserDrivers\chromedriver.exe', options=options)
driver.get("https://www.google.com/")

参考

您可以在以下位置找到一些相关的详细讨论:

于 2021-12-17T07:12:53.433 回答
0

您的问题的原因是因为您添加了以下参数:

options.add_argument("user-data-dir=C:/Users/A127538/AppData/Local/Google/Chrome/User Data")

该论点是指示 selenium 使用您的本地 chrome 配置文件。因此,由于您打开了 chrome 会话,因此在您关闭浏览器会话之前无法执行自动化。

删除参数以执行独立的自动化测试配置文件。

请参阅下面的问题提供的修复代码

from selenium import webdriver

PATH = "C:\Program Files (x86)\chromedriver.exe"

options = webdriver.ChromeOptions()
driver = webdriver.Chrome(executable_path=PATH, options=options)
driver.get("https://disboard.org/sv/dashboard/servers")

link = driver.find_element_by_link_text("bump")
link.click()
于 2021-12-16T19:05:26.267 回答
0

如果您可以同时使用 Chrome 配置文件和自动化配置文件对您的用例至关重要,那么这里有一个可能的解决方案:

  1. 按照此线程中的说明安装 Chrome 的第二个(较旧或较新)版本

  2. 在您当前的 Chrome 中启用所需配置文件的同步。

  3. 从 Chrome 的第二个版本使用所需的配置文件登录,并在那里启用同步。

  4. 在您的代码中使用与第二版 Chrome 兼容的 chrome 驱动程序。

同步可能存在一些问题,无法加载您需要的所有内容,但如果它是简单的东西,比如保存的密码,那么这应该可以工作。

于 2021-12-22T03:43:50.820 回答