Python

Python+Seleniumでブラウザをスクロールさせるには?

Python+Seleniumでブラウザをスクロールさせるには?
最近は遅延読み込みを採用するサイトが多くなってきました。
参照したい要素が画面外にある場合、読み込んでいないので取得できません。
つまり、要素が画面内に入るまでスクロールする必要があるのです。

では、「Python + Selenium」でブラウザをスクロールさせるにはどうするのか?
その方法をまとめます。

 

コードの書き方は?

JavaScriptの「window.scrollTo()」をPythonの「execute_script()」で実行します。

driver.execute_script("window.scrollTo(【横方向のピクセル数】,【縦方向のピクセル数】);")

 

サイトの一番下まで移動する場合

「document.body.scrollHeight」でスクロールできる最大のピクセル数を取得できるので、縦方向のピクセル数に指定します。

from selenium import webdriver
 
 
driver = webdriver.Chrome('【chromedriver.exeのパス】')
 
driver.get('https://オンライン将棋教室・香.com/')
driver.execute_script('window.scrollTo(0, document.body.scrollHeight);')
print('移動しました')

 

サイトの一番上まで戻る場合

「window.scrollTo()」の引数を「0,0」と指定すると上まで戻ります。

from selenium import webdriver
import time
 
 
driver = webdriver.Chrome('【chromedriver.exeのパス】')
 
driver.get('https://オンライン将棋教室・香.com/')
# 画面が戻ってるかを目で見るために、一度下にスクロールする
driver.execute_script('window.scrollTo(0, 1000);')
print('下へ移動しました')
time.sleep(1)
 
driver.execute_script('window.scrollTo(0, 0);')
print('最上部へ移動しました')

 

少しずつスクロールしたい場合

「window.scrollTo()」を使ってもできますし、「window.scrollBy()」を使って現在位置からのスクロールさせるのも良いでしょう。
下記は100ピクセルずつ10回スクロールするコードです。
上にスクロールさせたいなら、「scrollBy()」の引数にマイナスを指定します。

from selenium import webdriver
import time
 
 
driver = webdriver.Chrome('【chromedriver.exeのパス】')
 
driver.get('https://オンライン将棋教室・香.com/')
 
for i in range(10):
    driver.execute_script('window.scrollBy(0, 100);')
    print('下へ移動しました')
    time.sleep(1)

 

まとめ

「Python + Selenium」でブラウザをスクロールさせるには、「driver.execute_script("window.scrollTo();")」や「driver.execute_script("window.scrollBy();")」を使うとできます。
ちなみに、ToやByの大文字小文字を間違えるとエラーになるので、お気を付けください。

-Python
-, , , , , , , , ,