Python+seleniumの描画時に要素配置を待機する

seleniumを使ってのスクレイピングは強力ですが、非同期で実行されるのでrequestsやcurlのような確実性が失われてしまいます。

フォーム入力などの操作を確実に行うためには、対象の要素が描画されるまで待機する必要があります。

例えば、ログインページでユーザー名を入力する際は、以下のようなコードで要素が入力可能になるまで待機するのが安全です。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions

driver = webdriver.Firefox()
driver.get(login_page_url)
WebDriverWait(driver, 20).until(expected_conditions.element_to_be_clickable((By.NAME, "username")))

また、ログイン後に何か操作を行う場合は、ログイン後にリダイレクトされるページがきちんと描画されていることを確認した方が良さそうです。

確認には適当なIDを持つ要素を選び、それが描画されるのを待つのが良いと思います。

WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.ID, "some-element-id")))

これらに気を使わないと意外とうまくいきません。

Pythonを書いているのに非同期に気を使っていると、別言語を書いている気分になりますね(ブラウザを操作しているので当然ですが・・・)。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です