chrome会话已在运行时,python selenium打开驱动程序

时间:2019-06-13 17:10:19

标签: python selenium

我正尝试使用默认用户使用selenium python库打开网页,脚本使用默认用户至关重要,但是如果我的chrome浏览器已经打开,脚本会崩溃并显示以下错误:

selenium.common.exceptions.InvalidArgumentException: 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

我已经尝试过这里给出的所有解决方案:

Selenium chromedriver won't launch URL if another chrome instance is open

Selenium won't open a new URL in a new tab (Python & Chrome)

并阅读到较旧的chromedriver版本中存在一个错误,但已在chrome 74(即时通讯使用)中修复: https://github.com/SeleniumHQ/docker-selenium/issues/741

from selenium import webdriver
import time
from getpass import getuser

def run():
    # Chrome driver path
    chromedriver = r'C:\Users\user1\Downloads\chromedriver_win32\chromedriver_new.exe'

    # Get chrome webdriver options and set open the browser as headless
    chrome_options = webdriver.ChromeOptions()
    #chrome_options.add_argument("--headless")

    # Fix for selenium Issue 2907
    #chrome_options.add_argument('--log-level=3')
    #chrome_options.add_experimental_option('excludeSwitches', ['enable-logging'])

    # Load current user default profile
    current_user = getuser()
    chrome_options.add_argument(
        r"--user-data-dir=C:\Users\{}\AppData\Local\Google\Chrome\User Data".format(current_user))

    # didable "Chrome is being controled by an automated test software"
    chrome_options.add_argument('disable-infobars')

    # get Chrome to stay open
    chrome_options.add_experimental_option("detach", True)

    # open browser with options and driver
    driver = webdriver.Chrome(options=chrome_options, executable_path=chromedriver)
    driver.get(r'https://www.youtube.com/watch?v=dQw4w9WgXcQ')



if __name__ == '__main__':
    run()

如果我在没有Chrome浏览器的情况下运行它,如果没有崩溃,请打开它的声音

2 个答案:

答案 0 :(得分:1)

我也想使用默认的Chrome配置文件运行Selenium,但是遇到了同样的问题。我通过将UserData文件夹复制到另一个位置来解决该问题,然后使用了新位置。这是我完整的代码:

from selenium import webdriver
options = webdriver.ChromeOptions() 
options.add_argument("user-data-dir=C:\\Users\\myusername\\Desktop\\User Data")
options.add_argument("--profile-directory=Profile 1");
browser = webdriver.Chrome(options=options) 
browser.get('https://www.google.com')

如果您要使用默认的Chrome配置文件,而不是为Selenium创建的特定配置文件,请从代码中删除以下行。

options.add_argument("--profile-directory=Profile 1");

答案 1 :(得分:0)

此错误消息...

selenium.common.exceptions.InvalidArgumentException: 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

...表示 ChromeDriver 无法使用指定的{{来启动/产生新的浏览上下文,即 Chrome浏览器会话1}},因为它已经在使用中。


我能够在本地框中重现该错误,如下所示:

  • 代码块:

    user data directory
  • 完成相关的追溯:

    from selenium import webdriver
    import getpass
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_argument(r"--user-data-dir=C:\Users\{}\AppData\Local\Google\Chrome\User Data".format(getpass.getuser()))
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get("https://www.google.com/")
    

分析

由于程序无法将缓存文件夹[18516:23156:0204/032227.883:ERROR:cache_util_win.cc(21)] Unable to move the cache: Access is denied. (0x5) [18516:23156:0204/032227.898:ERROR:cache_util.cc(141)] Unable to move cache folder C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\ShaderCache\GPUCache to C:\Users\Soma Bhattacharjee\AppData\Local\Google\Chrome\User Data\ShaderCache\old_GPUCache_000 [18516:23156:0204/032227.898:ERROR:disk_cache.cc(178)] Unable to create cache [18516:23156:0204/032227.898:ERROR:shader_disk_cache.cc(605)] Shader Cache Creation failed: -2 Opening in existing browser session. Traceback (most recent call last): . selenium.common.exceptions.InvalidArgumentException: 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 移至..\ShaderCache\GPUCache,因此错误堆栈跟踪显然抱怨访问被拒绝。因此,缓存的创建失败,随后 Shader Cache Creation 的创建失败。尽管这些问题引发了..\ShaderCache\old_GPUCache_000,但可以在现有的 Chrome浏览器会话中强制打开新窗口。

现有Chrome浏览器会话的快照:

existing_session

现有Chrome浏览器会话中新窗口的快照:

new_window_within_existing_session


结论

尽管仍引发错误,但新的Chrome窗口仍会启动,但仍与已打开的 Chrome 会话保持连接,但新窗口不能由WebDriver实例控制。 / p>


解决方案

您需要注意以下几点:

  • 如果您使用默认Chrome配置文件来访问同一 Test Machine 上其他工作的网页,则不应设置 {{1} } 作为用户数据,因为它仍然被您手动启动的其他Chrome进程锁定。
  • 如果要在隔离的测试系统中执行测试,则可以将 InvalidArgumentException 设置为。.\ User Data \ Default 访问默认Chrome配置文件
  • 不过,按照最佳实践,您必须始终创建一个新的 Chrome配置文件来执行测试,因为默认Chrome配置文件可能包含扩展名书签浏览历史记录等,并且可能无法正确加载。