当前位置: 首页 > 知识库问答 >
问题:

Python Selenium Chrome“用户数据目录已在使用”

乜业
2023-03-14

我正在尝试用python和selenium制作一个脚本,它将打开一个网站并单击一个按钮。问题是我必须先关闭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()

共有3个答案

江建明
2023-03-14

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

>

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

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

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

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

赵驰
2023-03-14

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

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

参数是指示硒使用您的本地铬配置文件。因此,当您打开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()
白高超
2023-03-14

此错误消息...

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

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

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

  • 打开GoogleChrome,选择右上角的用户图标,点击添加。
  • 输入新用户的名称,选择一个图标以帮助表示此新帐户,并使以后更容易查找。然后,选择Add
  • 您将在桌面上找到创建的Chrome配置文件快捷方式。
  • 此外,您会发现在Default旁边创建了一个新的子目录Profile 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/")

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

  • 如何在Selenium Webdriver Python 3中使用Chrome配置文件
  • 硒。常见的例外情况。InvalidArgumentException:消息:无效参数:用户数据目录已在使用real Chrome浏览器时出错
  • Selenium:指向默认Chrome会话
 类似资料:
  • 当我试图使用让当前用户使用Selenium启动Chrome时,我得到一个错误,如下所示: 如何修复此错误?

  • 问题内容: 我将用户导向器设置为这样的默认用户数据目录(因此,我不必担心每次都要输入网站密码并登录): 现在,我希望我的Gmail出现,但它要求我登录。 此外,当我打印所需的功能时,似乎根本没有设置用户数据目录: {u’takesScreenshot’:是,u’acceptSslCerts’:是,u’networkConnectionEnabled’:否,u’mobileEmulationEnab

  • 我正在使用Symfony Panther和Laravel框架。我用这个时出错了 未知错误:无法为用户数据目录创建临时目录{"异常":"[对象](Facebook\WebDriver\Exception\Unknown nErrorException(代码:0): 我已经安装了适用于Windows 7.4.2的XAMPP。 PHP:7.4.2,Apache:2.4.41 创作者json [2020-

  • 我是mysql和php的新手。 一直致力于为用户创建一个带有表的数据库。 我已经成功地将用户添加到数据库中,他们的密码是md5(是的,我知道它不安全),它不会在线启动。 我的问题是,如何根据用户正确的用户名和密码登录。 这是我的密码 我的逻辑是taht查询运行后,它将返回true或false。 如果为真,则显示成功登录,否则不成功。 然而,即使我输入了正确的用户名和密码,我仍然会收到一条不成功的登

  • 在多用户系统中,用UserDir指令可以允许每个用户在其宿主目录中拥有一个网络站点。使用URL http://example.com/~username/ 的访问者可以获得用户"username"的宿主目录中的内容或者用UserDir指定的子目录中的内容。 用户网站目录 相关模块 相关指令 mod_userdir UserDir DirectoryMatch AllowOverride 用User

  • 我是JavaFx新手,尝试在我的应用程序中实现它的浏览器。由于在每次新启动时重新加载所有图像相当耗时,我想将它们存储在一些缓存目录中,但一直未能做到这一点。我尝试使用setUserDataDirectory(…) 然后我发现这是一个很好的帖子,但首先,我还不允许在那里发表评论,其次,它似乎只针对JavaFX2.2。那里发布的内容对JavaFx 8仍然适用吗?如果是这样:有没有一种简单的方法来实现这