1. ホーム
  2. セレン

selenium でページ (または特定の要素) の読み込みが完了するのを待つ

2022-02-09 11:56:14
<パス

記事目次

要求事項

時には、selenium を使っていくつかの要素を取得するとき、必要なデータを取得する前に、Web サイトにいくつかの要素を読み込むためにページを待機する必要があるので、そのときにページ待機機能が必要になります。

1. 待ち時間を表示する(推奨)

明示的な待機とは、コードをさらに実行する前に、ある条件が発生するのを待つことをコードで定義することです。最悪のケースはtime.sleep()を使うことで、正確な時間だけ待つように条件を設定することです。ここでは、必要な時間だけ待機させる便利な方法を紹介します。webDriverWait と ExpectedCondition の組み合わせは、これを実装する1つの方法です。必要な要素が見つかり、実行が継続される

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 as EC

driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, '//*[@id="su"]'))
    )
    text = driver.page_source
    print("text", text)
finally:
    driver.quit()


2. 暗黙の待機(これも良い)

ある要素がすぐに利用できない場合、暗黙的に待つことは、その要素を探す前に一定時間待つようにWebDriverに指示することです。デフォルトの待ち時間は0秒で、その値が設定されると、暗黙の待機はWebDriverのインスタンスの寿命を設定します。

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # seconds
driver.get("https://www.baidu.com/")
myDynamicElement = driver.find_element_by_xpath('//*[@id="su"]')
text = driver.page_source
print("text", text)


3. time.sleep(一般的には推奨されません。)

は、timeモジュールのtime.sleep()を使用して待機時間を設定することです(一般的に、これはお勧めしません、時間は、我々が必要とするデータ要素を取得するために、より多くの待ち時間があります)。

from selenium import webdriver
import time
driver = webdriver.Chrome()
# driver.implicitly_wait(10) # This is in seconds
driver.get("https://www.baidu.com/")
time.sleep(2) 
text = driver.page_source
print("text", text)