こんにちは、ミナピピン(@python_mllover)です!
今回は案件で作成したseleniumのコードが使用しているwebdriverのchromeがバージョン更新で定期的に使えなくなるエラーについて相談を受けたので自動でバージョン更新して安定して動作するように調査した結果をまとめておこうと思います。
webdriver-managerで更新の自動化が可能
結論からいくと「webdriver-manager」というライブラリを使用することで常にSeleniumで使用するGoogleChromeのWebdriverのバージョンを最新版にすることが可能みたいです。まずは必要なライブラリをPIPでインストールします
# ライブラリをインストールする $ pip install webdriver-manager $ pip install selenium $ pip install chromedriver_binary
サンプルコードを実行する
以下にサンプルコードを記述します。
seleniumのバージョンは4.8を使用しています。
ブラウザ起動する場合
from selenium import webdriver 
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
url = 'https://tkstock.site/' 
d = DesiredCapabilities.CHROME
d['goog:loggingPrefs'] = {'performance': 'ALL'} 
driver = webdriver.Chrome(ChromeDriverManager().install(),desired_capabilities=d) 
driver.set_window_size('1200','1000')
driver.get(url)
ヘッドレスモードで使用する場合
上記のコードだと
options.add_argument('--headless')
を追加してヘッドレスモードを指定するとブラウザがクラッシュして起動しない場合があります。その際にバイナリーのウェブドライバーを使用する必要があります。webdriver-managerでドライバーは常に最新のものを使用できますが、それとバイナリのバージョンが違うとエラーになるためSubprocessを使用してバイナリのバージョンも常に最新に合わせる必要があります。
<サンプルコード>
import subprocess
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import chromedriver_binary 
from selenium.webdriver.chrome.options import Options
cmd = 'pip install --upgrade chromedriver_binary' 
res = subprocess.call(cmd, shell=True)
url = 'https://tkstock.site/'
d = DesiredCapabilities.CHROME
d['goog:loggingPrefs'] = { 'performance': 'ALL' }
options = Options()
options.add_argument('--headless')
driver = webdriver.Chrome(ChromeDriverManager().install(),desired_capabilities=d,chrome_options=options)
driver.set_window_size('1200','1000')
driver.get(url)
import chromedriver_binaryはブラウザを実際に起動しないheadlessモードを使用する際に必要になります。
終わり
これでコマンドラインなどでドライバーのバージョンを更新することなく、PYファイルのみで最新の状態を維持してスクレイピングを行うことが可能になります。
 
  
  
  
  

コメント
[…] 関連記事:【Python】Seleniumで使用するWebDriverの更新を自動化してコードの挙動を安定させる […]
[…] 関連記事:SeleniumのChromeDriverの更新・バージョン管理を自動化する方法 […]
[…] 関連記事:SeleniumのChromeDriverの更新・バージョン管理を自動化する方法 […]
[…] 関連記事:SeleniumのChromeDriverの更新・バージョン管理を自動化する方法 […]
[…] SeleniumのChromeDriverの更新・バージョン管理を自動化する方法 […]