最近は遅延読み込みを採用するサイトが多くなってきました。
参照したい要素が画面外にある場合、読み込んでいないので取得できません。
つまり、要素が画面内に入るまでスクロールする必要があるのです。
では、「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の大文字小文字を間違えるとエラーになるので、お気を付けください。