はじめに
久しぶりに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')))
これで指定した要素が表示されるまで取得するのを待つようになるので問題なくなった。