【Python3】Seleniumで読み込みの待機処理を行う方法

おはこんばんにちは、せなです。
今回はSeleniumでページを読み込んだ際に、待機処理を行う方法を説明したいと思います。

Explicitly waitを使用した方法(明示的な待機)

Explicitlyは条件を指定して読み込みを行うことができます。

例えば全ての要素が読み込まれるまで待機する場合は以下のように書きます。

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.get('https://www.youtube.com/')

# タイムアウト判定を行う
try:
    # 全てのコンテンツが読み込まれるまで待機
    WebDriverWait(driver, 15).until(EC.presence_of_all_elements_located)
except TimeoutException as e:
    # 例外処理
    print(e)

また、特定のクラスやIDが読み込まれるまで待機したい場合は以下のように書きましょう。

# 指定したクラスが読み込まれるまで待機
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.CLASS_NAME, 'CLASS名')))

# 指定のIDが読み込まれるまで待機
WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, 'ID名')))

Implicitly waitを使用した方法(暗黙的な待機)

Implicitly waitは設定することでページ読み込み時にN秒待機することができます。

# chromeを使用
driver = webdriver.Chrome(ChromeDriverManager().install())
# ページ読み込み時に10秒待機
driver.implicitly_wait(10)
driver.get('https://www.youtube.com/')

lmplicitly waitは設定すると全てのページを読み込む際に待機時間が発生します。
この待機を明示的な待機と併用すると、予期しないタイムアウトが発生することがありますので、注意してください。