DevTools remote debugging requires a non-default data directory. Specify this using --user-data-dir. Created TensorFlow Lite XNNPACK delegate for CPU.

上述标题是控制台完整报错

问题描述

  • 笔者使用Python 3.12.8selenium = "^4.29.0"库搭配对应版本的chrome-driver进行自动化测试
  • 当浏览器版本更新到136.0.7103.93 (正式版本) (64 位) (cohort: Stable)
  • 出现无法导航到指定网站的情况(但是可以打开浏览器)
  • 同时控制台报错,报错信息如下:
DevTools remote debugging requires a non-default data directory. Specify this using --user-data-dir.
Created TensorFlow Lite XNNPACK delegate for CPU.
Message: session not created
from chrome not reachable
Stacktrace:
        GetHandleVerifier [0x00007FF76567CF25+75717]
        GetHandleVerifier [0x00007FF76567CF80+75808]
        (No symbol) [0x00007FF765448DCC]
        (No symbol) [0x00007FF765439C21]
        (No symbol) [0x00007FF76548BFD2]
        (No symbol) [0x00007FF765486518]
        (No symbol) [0x00007FF765481ADD]
        (No symbol) [0x00007FF7654D52D8]
        (No symbol) [0x00007FF7654D48B0]
        (No symbol) [0x00007FF7654C7153]
        (No symbol) [0x00007FF765490421]
        (No symbol) [0x00007FF7654911B3]
        GetHandleVerifier [0x00007FF76597D6FD+3223453]
        GetHandleVerifier [0x00007FF765977CA2+3200322]
        GetHandleVerifier [0x00007FF765995AD3+3322739]
        GetHandleVerifier [0x00007FF7656969FA+180890]
        GetHandleVerifier [0x00007FF76569E0FF+211359]
        GetHandleVerifier [0x00007FF765685274+109332]
        GetHandleVerifier [0x00007FF765685422+109762]
        GetHandleVerifier [0x00007FF76566BA39+4825]
        BaseThreadInitThunk [0x00007FF9221F259D+29]
        RtlUserThreadStart [0x00007FF923BAAF38+40]

报错原因分析

  • 上述报错的主要信息是:DevTools remote debugging requires a non-default data directory. Specify this using --user-data-dir. (翻译:DevTools 远程调试需要一个非默认的数据目录。请使用 --user-data-dir 来指定)
  • 但是,我代码中,是指定了--user-data-dir这个参数的,如下代码:
# 设置当前工作目录
current_dir = os.path.dirname(os.path.abspath(__file__))
print(f"当前工作目录: {current_dir}")

# ChromeDriver路径
chromedriver_path = os.path.join(current_dir, 'chromedriver-win64', 'chromedriver.exe')
print(f"ChromeDriver路径: {chromedriver_path}")

# Chrome用户数据目录
user_data_dir = os.path.expandvars('%LOCALAPPDATA%\\Google\\Chrome\\User Data')
print(f"Chrome用户数据目录: {user_data_dir}")

profile_name = 'Default' # 具体文件夹名

# 创建Chrome选项对象参数
chrome_options = Options()
chrome_options.add_argument(f'--user-data-dir={user_data_dir}')
chrome_options.add_argument(f'--profile-directory={profile_name}')
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument('--remote-debugging-port=9222')

print('正在创建WebDriver服务实例...')
service = Service(executable_path=chromedriver_path)

print('正在创建WebDriver对象,启动浏览器...')
driver = webdriver.Chrome(service=service, options=chrome_options)

print('正在打开测试ip地址...')
driver.get('http://10.0.11.111:11111')
  • 事实上,之前是一直可以正常运行的,但是由于谷歌浏览器会自动更新
  • 导致,当浏览器更新了以后,就没法跑自动化测试任务了
  • 所以,通过一番查找,找到了谷歌浏览器136版本的重大更新:
  • 更改了远程调试开关以提高安全性

  • 就是以前的谷歌浏览器版本,可以直接使用默认的谷歌浏览器的安装文件夹中的用户数据文件夹(个人资料路径),如下图
  • 【使用个人资料路径的话,当我们使用selenium打开浏览器的时候,我们一些默认收藏的书签啥的就都有的】

  • 自从136版本开始,这个文件夹就不允许直接指定使用了(出于安全考虑)
    • 自从136版本开始,这个文件夹就不允许直接指定使用了(出于安全考虑)
      • 自从136版本开始,这个文件夹就不允许直接指定使用了(出于安全考虑)
  • 也就是chrome_options.add_argument(f'--user-data-dir={user_data_dir}')
  • 这个user_data_dir必须要自己指定一个文件夹了
  • 比如,我指定 chrome_options.add_argument(r"--user-data-dir=C:\test-chrome")
  • 如果C盘有这个文件夹,就直接使用,没有的话,就会自动创建这个名字的文件夹
  • 【我们只能在自己指定的文件夹中,即测试浏览器打开的时候,进行一些收藏操作等】
  • 如下图:

  • 上图中的test-chrome文件夹,就相当于C:\Users\user\AppData\Local\Google\Chrome\User Data (打开这两个文件夹对比一下内容就知道了)

至此,问题解决

--user-data-dir--profile-directory 的回顾

  • --user-data-dir文件夹是浏览器存储用户配置文件的目录
  • --profile-directory文件夹是我们要与启动的用户配置文件里面的具体哪个文件夹
  • --profile-directory文件内部存储了很多信息,比如 收藏的地址栏信息、登录信息、cookies、sessionStoarge等...
  • user-data-dir可以有多个 profile-directory
  • 浏览器每登录一个新的user后,浏览器就会自动新增一个profile-directory文件夹
  • 默认就是user-data-dir\Default、新增的就是user-data-dir\Profile 2user-data-dir\Profile 3
  • 大家可以在地址栏输入:chrome://version/也能看到一些相关信息

参考文章


水冗水孚
1.1k 声望595 粉丝

每一个不曾起舞的日子,都是对生命的辜负