1. ページスクロールの自動化
ソーシャルメディアのフィードで、スクロールするたびにコンテンツがだらだらとロードされる……そんな光景を想像してみて。実は、この魔法のようなスクロールも、Seleniumを使った自動化のAPIを持っているんだよ。
メソッド execute_script()
Seleniumのexecute_script()
メソッドは、ページ上でJavaScriptコードを実行するためのものだよ。スクロールをする際にとても便利。これを使ってページをスクロールする方法を見てみよう。
from selenium import webdriver
import time
# ブラウザのドライバーを初期化
driver = webdriver.Chrome()
# ターゲットページを開く
driver.get('https://example.com/scrolling_page')
# ページを下にスクロール
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3) # コンテンツがロードされるのを待つ
# ページを上にスクロール(変化をつけるため)
driver.execute_script("window.scrollTo(document.body.scrollHeight, 0);")
# セッションを終了
driver.quit()
このスクリプトでは、window.scrollTo()
を使ってページをスクロールしている。引数 (0, document.body.scrollHeight)
は、ページの最初から最後までスクロールするよう指示しているんだ。シンプルで効率的な手法で、動的要素をすべてロードできるようになるよ。
なぜ重要なのか?
ページスクロールするためにexecute_script()
を使うと、最初は隠れているコンテンツをロードできるよ。たとえば、無限スクロールがある場合ね。特にソーシャルメディアやニュースフィードなど、動的にコンテンツが追加される場面で役立つんだ。
2. リンククリック
スクロールのやり方をマスターしたら、次は次のタスク、リンククリックの自動化に進もう。これってデータ収集でめちゃくちゃ重要。特に情報が別々のページに分散している場合ね。
リンクナビゲーションの基本
リンクをクリックするには、ターゲット要素でclick()
メソッドを使うんだ。簡単な例を見てみよう:
from selenium import webdriver
# ブラウザのドライバーを初期化
driver = webdriver.Chrome()
# ターゲットページを開く
driver.get('https://example.com/links_page')
# テキストを使ってリンクを見つけてクリック
link = driver.find_element_by_link_text('Next Page')
link.click()
# セッションを終了
driver.quit()
この例では、リンクのテキスト内容を使ってリンクを探している。でも、もしテキストがユニークじゃなかったらどうする?その場合、find_element_by_xpath()
やfind_element_by_css_selector()
のようなもっと正確なメソッドを使用できるんだ。
# XPathを使用してリンクを探す
link = driver.find_element_by_xpath('//a[@href="/next_page"]')
link.click()
リンククリックの自動化の利点
Seleniumを使ったリンクナビゲーションは、ページネーションがあるサイトや情報がいくつかのセクションに分かれているサイトで、データ収集を自動化するのに最適。検索結果を巡回したり、オンラインショップのカタログを閲覧したりするのにも便利。
3. スクロールとリンククリックの組み合わせ
じゃあ、ページをスクロールして目的のリンクや要素を探し出し、そのページに移動する必要がある場合はどうする?これは複合的なプロセスだけど、自動化できるんだ。
複合スクリプトの例
from selenium import webdriver
import time
# ブラウザのドライバーを初期化
driver = webdriver.Chrome()
# ターゲットページを開く
driver.get('https://example.com/scroll_and_click')
# 隠された要素をロードするためにページをスクロール
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(3)
# 必要なリンクを探してクリック
link = driver.find_element_by_xpath('//a[text()="Load More"]')
link.click()
# セッションを終了
driver.quit()
何が問題になる可能性がある?
動的なページで動作する場合、要素がロードされなかったり、完全にロードされていなかったりすることがあるよね。この場合は、待機メソッドを使って、操作したい要素がアクセス可能であることを確認する必要があるんだ。
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# 要素がクリック可能になるまで待機
element = WebDriverWait(driver, 10).until(
EC.element_to_be_clickable((By.XPATH, '//a[text()="Load More"]'))
)
element.click()
待機メソッドを使えば、要素が準備できていないためにスクリプトが失敗するのを防ぎ、より安定した動作が実現できるんだよ。
GO TO FULL VERSION