selenium
久しぶりにseleniumを動かしたら動かなくて、その対処

はじめに

久しぶりにseleniumを動かしたら動かなくて、その対処

chromeとドライバーのバージョンがあってない

よくあるパターン。chrome本体をアップデートした上でChromeDriverのバージョンを合わせる

アップデートしたらChromeDriverManager.install()がうごかなくなった

seleniumのバージョンが4以上だと、optionをservice経由で指定する必要があった。


■古いバージョン
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
driver = webdriver.Chrome(ChromeDriverManager.install(), options=options)

■新しいバージョン
from selenium.webdriver.chrome.service import Service

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
service = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=service,options=chrome_options)

OSError: [Errno 8] Exec format error: '~省略/chromedriver-mac-x64/THIRD_PARTY_NOTICES.chromedriver' が出て動かない

どうやら、ドライバーの指定がおかしくなっているようで、手動でパスを指定してあげたことで直った。


from selenium.webdriver.chrome.service import Service	
	
chrome_path = "/Users/{USER}/.wdm/drivers/chromedriver/mac64/{VERSION}/chromedriver-mac-arm64/chromedriver"

service = Service(executable_path=chrome_path)
driver = webdriver.Chrome(service=service)

これで自分の環境は直ってくれた。

今まで取れていた要素がうまく取得できない

なんかバージョンを上げたら取得できていたところが取得できない。取得できていた箇所もあってwaitがうまくいっていなくて、以下の記述に切り替えた


	
#wait.until(EC.presence_of_element_located(({取得したい要素})))	
wait.until(EC.presence_of_element_located((By.NAME,'applyPepopleNum')))

これで指定した要素が表示されるまで取得するのを待つようになるので問題なくなった。