Seleniumでページをスクロールする方法としてはブラウザ上でJSのwindow.scrollTo()実行する方法が有名ですが、サイトによってはJSがうまく機能せずこの方法ではスクロールできないことがあります。
# 上手くいかなかったコード driver.execute_script("window.scrollTo(0, 500);")
関連記事:【Python】Seleniumでスクレイピングする際によく使うメソッドのまとめ
Contents
対処法
こういった場合はクリックとページダウンのキー入力を使うことで下スクロール動作を行うこと方法が有効です。まず必要な追加モジュールを読み込みます(これはseleniumに入っているものなので、pipは必要ありません。)
# 必要なライブラリを追加 from selenium.webdriver.common.keys import Keys
コードは以下のような感じです。
selenium3の場合
# 一度body要素クリックしてからページダウンする driver.find_element_by_tag_name('body').click() driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
ページ最下部にスクロールしたければfor文などでPAGE_DOWNを繰り返すとよいです
<コード例>
# 10回PAGE_DOWNキーを入力する for i in range(10): driver.find_element_by_tag_name('body').send_keys(Keys.PAGE_DOWN)
selenium4の場合
driver.find_element(By.TAG_NAME,"body").click() driver.find_element(By.TAG_NAME,"body").send_keys(Keys.PAGE_DOWN)
# PAGE_DOWNを10回押す for i in range(10): driver.find_element(By.TAG_NAME,"body").send_keys(Keys.PAGE_DOWN)
終わり
jsはセキュリティー対策で無効化されている場合があるのでその場合はファンクションキー(F1~12)を使って動作するようなプログラムにしてあげるとよいです。
またselenium3と4で書き方が変わっている点も注意してください。
<確認プログラム>
import selenium print(selenium.__version__)
関連記事:Seleniumで「WebDriver; object has no attribute find_element_by_○○」が表示される原因と解決法
では~
関連記事:【Python】メリカリの検索結果から商品名・価格・URLをSeleniumで取得するサンプルプログラムを作ってみた
関連記事:【Python】Seleniumで「element click intercepted」でボタン要素がクリックできない時の対策
関連記事:Seleniumで「WebDriver object has no attribute」が起きた時の対策と解決法
コメント
[…] 関連記事:Seleniumでページスクロール(window.scrollTo)が効かない時の代替方法 […]