[解決済み】Selenium WebDriver for Pythonでページが読み込まれるまで待機する。
2022-04-04 08:45:44
質問
無限スクロールで実装されたページのデータを全てスクレイピングしたい。以下のpythonのコードは動作します。
for i in range(100):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(5)
これは、下までスクロールするたびに5秒待つ必要があることを意味します。これは一般に、ページが新しく生成されたコンテンツの読み込みを終えるのに十分な時間です。しかし、これでは時間効率が悪いかもしれません。ページが5秒以内に新しいコンテンツの読み込みを終えるかもしれません。スクロールダウンするたびに、ページが新しいコンテンツの読み込みを終了したかどうかを検出するにはどうすればよいでしょうか?もし検出できれば、ページの読み込みが終了したことがわかった時点で、もう一度スクロールダウンしてコンテンツを見ることができます。この方が時間効率が良いのです。
解決方法は?
その
webdriver
によって、デフォルトでページの読み込みを待ちます。
.get()
メソッドを使用します。
ユーザ 227215 が言うように、特定の要素を探しているのであろう。
WebDriverWait
を使用して、ページ内にある要素を待機させます。
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
browser = webdriver.Firefox()
browser.get("url")
delay = 3 # seconds
try:
myElem = WebDriverWait(browser, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
print "Page is ready!"
except TimeoutException:
print "Loading took too much time!"
アラートの確認に使っています。他の型のメソッドでロケーターを見つけることができます。
EDIT 1:
言っておくと
webdriver
はデフォルトでページが読み込まれるのを待ちます。フレーム内の読み込みやajaxリクエストは待ちません。つまり
.get('url')
ブラウザはページが完全に読み込まれるまで待ち、コードの次のコマンドに進みます。しかし、ajaxリクエストを投稿しているとき。
webdriver
ページまたはページの一部が読み込まれるのを適切な時間待つのは、あなたの責任です。
expected_conditions
.
関連
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】押されたキーをpythonスクリプトで待たせる方法とは?
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み] Pythonのswitch文の代用品?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] virtualenvで異なるバージョンのPythonを使用する
-
[解決済み] 2次元アレイにおけるピーク検出
-
[解決済み] Selenium WebDriverでスクリーンショットを撮るにはどうしたらいいですか?
-
[解決済み】Selenium WebDriverでPythonを使用してWebElementのHTMLソースを取得する。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ピローによる動的キャプチャ認識のためのPythonサンプルコード
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Pythonによるjieba分割ライブラリ
-
Python百行で韓服サークルの画像クロールを実現する
-
任意波形を生成してtxtで保存するためのPython実装
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】"No JSON object could be decoded "よりも良いエラーメッセージを表示する。
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない