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)
関連
-
[解決済み] WebDriver や Protractor でタブを閉じる方法はありますか?
-
[解決済み] WebDriverサーバーの初期起動ページです。
-
[解決済み] org.openqa.selenium.remote.UnreachableBrowserException: リモートブラウザとの通信にエラーが発生しました。ChromeDriverとSeleniumで死亡している可能性があります。
-
selenium chromeドライバとIEドライバのFAQ (1)
-
ドライバの実行ファイルのパスは、webdriver.gecko.driver システムプロパティで設定する必要があります。
-
selenium webdriverでFirefoxの新バージョンを呼び出す。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例