博客 / 詳情

返回

non-default data directory.Specify this using --user-data-dir

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/也能看到一些相關信息

參考文章

  • 更改了遠程調試開關以提高安全性  |  Blog  |  Chrome for Developers
  • ChromeDriver v136 Error: -user-data-dir - AutoIt General Help and Support - AutoIt Forums (autoitscript.com)
  • python - Selenium 4.25 opens Chrome 136 with existing profile to "New Tab" instead of navigating with driver.get() - Stack Overflow
user avatar sysu_xuejia 頭像 thosefree 頭像 godbmw 頭像
3 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.