ある日突然、Seleniumの初期化時にエラーが発生するようになってしまった。
環境
- Selenium 4.8.0
- Chrome 110.0.5481.77
- Python 3.10.10
不具合内容
Pythonスクリプト内のSeleniumの初期化部分で、次のようなエラーが発生するようになった。
Traceback (most recent call last):
File "/Users/foobar/Developments/olnovel/./download.py", line 71, in <module>
web.init(True) #True指定ならヘッドレス
File "/Users/foobar/Developments/olnovel/lib/web.py", line 51, in init
driver = webdriver.Chrome(service=chrome_service, options=options)
File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py", line 80, in __init__
super().__init__(
File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py", line 104, in __init__
super().__init__(
File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 286, in __init__
self.start_session(capabilities, browser_profile)
File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 378, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 440, in execute
self.error_handler.check_response(response)
File "/opt/homebrew/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 245, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: unknown error: unable to discover open pages
Stacktrace:
0 chromedriver 0x00000001008991c0 chromedriver + 4248000
1 chromedriver 0x0000000100819dc0 chromedriver + 3726784
2 chromedriver 0x00000001004ceec4 chromedriver + 274116
3 chromedriver 0x00000001004fa22c chromedriver + 451116
4 chromedriver 0x00000001004f605c chromedriver + 434268
5 chromedriver 0x00000001004f319c chromedriver + 422300
6 chromedriver 0x0000000100536c10 chromedriver + 699408
7 chromedriver 0x00000001004fd200 chromedriver + 463360
8 chromedriver 0x00000001004fe318 chromedriver + 467736
9 chromedriver 0x0000000100867060 chromedriver + 4042848
10 chromedriver 0x000000010086b8a4 chromedriver + 4061348
11 chromedriver 0x00000001008733d0 chromedriver + 4092880
12 chromedriver 0x000000010086c6e4 chromedriver + 4064996
13 chromedriver 0x00000001008420fc chromedriver + 3891452
14 chromedriver 0x000000010088ca64 chromedriver + 4196964
15 chromedriver 0x000000010088cbb8 chromedriver + 4197304
16 chromedriver 0x00000001008a0650 chromedriver + 4277840
17 libsystem_pthread.dylib 0x000000019a6f606c _pthread_start + 148
18 libsystem_pthread.dylib 0x000000019a6f0e2c thread_start + 8
原因
Selenium 4.8.0 および chromedriver でのヘッドレス指定に関する仕様変更のため。
Selenium 4.8.0
属性 headless が廃止になった。ヘッドレス指定は、add_argument 関数を使用する。
Chrome 110
‘–headless’ に Chrome のバージョンに応じた値を渡すのが必須となるよう仕様変更があった。(以前から値を渡すことはできたが、必須ではなかった。)
対策
add_argument 関数を使って Chrome 109 以降の場合は ‘–headless=new’、Chrome 108 以前の場合は ‘–headless=chrome’ と指定する。
参考
- Chrome Headless mode upgrades (Chrome Enterprise および Chrome Education リリースノート)
- Headless is Going Away! (Selenium Blog)
- Selenium Chrome driver headless mode not working (stack overflow)