selenium with python を使って
垂直方向に長いページを
下のほうの部分が見えるように
スクロールダウンできるようなメソッドは
ないでしょうか?
そのようなメソッドでのスクロールの移動の量は
ピクセル単位でしょうか?
↓
Selenium を使って垂直方向に長いページをスクロールするには、
`execute_script` メソッドを使用して
JavaScript を実行する方法があります。
この方法では、スクロールの移動量をピクセル単位で指定できます。
### 基本的なスクロールダウンの方法
以下は、100ピクセルずつスクロールダウンする例です。
```python
from selenium import webdriver
import time
# WebDriver のセットアップ (例: ChromeDriver)
driver = webdriver.Chrome()
# 対象ページを開く
# 長いページのURLに置き換えてください
driver.get("https://example.com")
# スクロールダウン (100ピクセルずつ)
for _ in range(10): # 10回スクロールダウン
driver.execute_script(
"window.scrollBy(0, 100);")
# スクロール間の待機時間 (任意)
time.sleep(0.5)
# ブラウザを閉じる
driver.quit()
```
### スクロール量の制御
- 上記の例で `window.scrollBy(0, 100);` の
`100` がスクロール量をピクセル単位で指定しています。
- `0` は水平方向のスクロール量を意味し、
`100` は垂直方向のスクロール量を意味します。
- 負の値を使用すると、スクロールアップができます
(例: `window.scrollBy(0, -100)`)。
---
### ページの最下部までスクロールする
ページ全体をスクロールしたい場合、
以下のように最下部までスクロールできます。
```python
# ページの最下部までスクロール
driver.execute_script(
"window.scrollTo(0, document.body.scrollHeight);")
```
- `document.body.scrollHeight` は
ページ全体の高さを取得します。
- 最下部まで一気にスクロールします。
---
### 動的にコンテンツが読み込まれる場合
- 動的にコンテンツがロードされるページ
(例: ソーシャルメディアのフィード) では、
一定間隔でスクロールして新しいコンテンツをロードさせることが必要です。
- その場合、以下のようなループを使用します。
```python
last_height
= driver.execute_script(
"return document.body.scrollHeight")
while True:
# ページの最下部までスクロール
driver.execute_script(
"window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2) # ロードを待つ (任意の秒数に調整)
# 新しい高さを取得
new_height
= driver.execute_script(
"return document.body.scrollHeight")
if new_height == last_height:
break # 高さが変わらない場合は終了
last_height = new_height
```
### まとめ
- `window.scrollBy(x, y)` を使えば
ピクセル単位でのスクロールが可能。
- `window.scrollTo(
0, document.body.scrollHeight)`
を使えば最下部までスクロール。
- 動的ロード対応にはループと
`scrollHeight` を組み合わせると効果的です。
コメント
コメントを投稿