Python Selenium

Seleniumでページスクロール(window.scrollTo)が効かない時の代替方法

この記事は約3分で読めます。

 

Seleniumでページをスクロールする方法としてはブラウザ上でJSのwindow.scrollTo()実行する方法が有名ですが、サイトによってはJSがうまく機能せずこの方法ではスクロールできないことがあります。

 

# 上手くいかなかったコード
driver.execute_script("window.scrollTo(0, 500);")

 

関連記事:【Python】Seleniumでスクレイピングする際によく使うメソッドのまとめ

 

スポンサーリンク
スポンサーリンク

対処法

 

こういった場合はクリックとページダウンのキー入力を使うことで下スクロール動作を行うこと方法が有効です。まず必要な追加モジュールを読み込みます(これは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」が起きた時の対策と解決法

 

コメント

  1. […] 関連記事:Seleniumでページスクロール(window.scrollTo)が効かない時の代替方法 […]

タイトルとURLをコピーしました