20
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

webdriver_manager を利用して webdriver を取得しようとすると OSError が発生する現象の回避策

Last updated at Posted at 2024-07-24

OSError が発生するようになった

webdriver_manager のバージョン 4.0.1、chrome のバージョン 127.0.6533.72 現在で以下のコードが OSError を吐くようになった。

追記:バージョン 4.0.2 で対応されました

chrome_service = Service(executable_path=ChromeDriverManager().install())
driver = webdriver.Chrome(service=chrome_service, options=options)

OSError: [WinError 193] %1 is not a valid Win32 application

chromedriver のバージョン 127.0.6533.72 には

  • chromedriver.exe
  • LICENSE.chromedriver
  • THIRD_PARTY_NOTICES.chromedriver

の 3 ファイルが含まれており、実行可能ファイルを探す際に LISENCE は無視しているが THIRD_PARTY_NOTICES は無視されない ことにより、chromedriver.exe ではなく THIRD_PARTY_NOTICES.chromedriver が返されてしまうことが原因らしい。

回避策

webdriver_manager のバージョンアップで対応されると思われるが、それまでは下記のように直接 .exe を指定することで回避することにした。

webdriver_path = ChromeDriverManager().install()
if os.path.splitext(webdriver_path)[1] != '.exe':
    webdriver_dir_path = os.path.dirname(webdriver_path)
    webdriver_path = os.path.join(webdriver_dir_path, 'chromedriver.exe')
chrome_service = Service(executable_path=webdriver_path)
driver = webdriver.Chrome(service=chrome_service, options=options)

2024/08/01 追記

バージョン 4.0.2 が 2024/07/25 にリリースされて修正された。
ただ、修正内容としてはバイナリを取得する際に LICENSE のほかに THIRD_PARTY_NOTICES も対象外とするというものなので今後おなじように何かファイルが追加されれば同じ現象が再発しそう。

直ぐに対応できるように以下の形は残しておくのが良いのかも?
(これはこれで名前が chromedriver から変更されたらエラーになるけれど......)

import os
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
webdriver_path = ChromeDriverManager().install()

expect_binary_name = 'chromedriver'
if os.name == 'nt':
    # windows の場合は拡張子 .exe を付ける
    expect_binary_name += '.exe'
actual_binary_name = os.path.basename(webdriver_path)
if actual_binary_name != expect_binary_name:
    webdriver_dir_path = os.path.dirname(webdriver_path)
    webdriver_path = os.path.join(webdriver_dir_path, expect_binary_name)

chrome_service = Service(executable_path=webdriver_path)
driver = webdriver.Chrome(service=chrome_service, options=options)
20
8
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?