ページ上に画像の長いリストがあります。ユーザーがページを下にスクロールしたときに自動的にアクティブになるアプリケーションのAJAX「画像をもっと読み込む」ボタンがページ下部にあります。 Seleniumでページを最後までスクロールし、ページの下部に「Load more images」ボタンがないことを確認します。 Selenium(画像なし)でロードするDOMだけを待つ方法
browser.execute_script("""
setInterval(function() {
window.scrollBy(0,50000);
}, 1000);
;""")
invisibleShowMoreCounter = 0;
while True:
if "" == browser.find_element_by_id("show_more").text:
invisibleShowMoreCounter = invisibleShowMoreCounter + 1
if (invisibleShowMoreCounter > 3): break
time.sleep(1)
それは一番下にページをスクロールし、このサイクルがあればわからない3秒間には「show_more」の要素が(存在しないことをチェックするスクリプトが(もっとエレガントな解決策があるかもしれないが、それはポイントではありません)しかし、まったく必要です)。 これは、ページを正常にスクロールすることですが、その後、ページが完全に読み込まれるまで(画像を含む)、時間がかかるようになるまで、browser.find_element_by_id( "show_more")に固定されます。 DOMはそこにありますが、たくさんの画像があるので、すべての画像を読み込むのに数分かかります。 ページが完全にロードされていない可能性が高いので100%確信しているわけではありません(サイクルの最初の繰り返しに移動し、find_element_by_idに数分間滞在した後、さらに正常に終了します) 問題は、すべての画像のダウンロードが完了するのを待たずにテストに合格するまで数分かかることがないかどうかです。
設定browser.implicitly_wait(1)
これはSelenium(WebDriver)のコンテキストでは関係がないとは確信しています。これはちょうどJSのチェックであると思われ、問題はセレンのコマンドがページが完全にロードされるのを待っていることです。 – Artemm
"webdriver.load.strategy"を "fast"にしようとしましたか? – user861594