Selenium基本操作#2(#Jupyter)
Selenium を使ってスクリプトを作成する際、使用頻度の高い Selenium API を整理したメモです。
この記事で示しているコードについては、#1記事の内容の続きのメモです。
#画面サイズを最大にする#
W = driver.execute_script('return document.body.scrollWidth')
H = driver.execute_script('return document.body.scrollHeight')
driver.set_window_size(W, H)
#「次のページ」へ移動する#
from selenium.webdriver.common.by import By
next_page = driver.find_element(By.LINK_TEXT, "次へ")
next_page.click()
#画面を下へスクロールする#
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
scroll_count = X # スクロール回数
for i in range(scroll_count):
driver.find_element(by=By.TAG_NAME, value="body").send_keys(Keys.END)
#画面上の「リスト」や「プルダウン」を選択する#
from selenium.webdriver.support.ui import Select
years = driver.find_element_by_name("year")
years_select = Select(years)
years_select.select_by_value("2024")
#要素を選択し、文字を挿入する#
from selenium.webdriver.common.by import By
element = driver.find_element(By.ID, 'XXXX')
element.send_keys("YYYY").click()
- XXXX:要素、YYYY:入力する文字
#{Xpath} を利用した要素取得#
from selenium.webdriver.common.by import By
elements = driver.find_elements(By.XPATH, '//div[@id="scroll"]/a[@href]')
for el in elements:
print(el.get_attribute('href'))
#{BS4} 正規表現と組み合わせた要素取得#
import re
Element = soup.find_all('a', href=re.compile(r'https://xxxxx.com/redirect.php?'))
for idx, element in enumerate(Element):
print(idx+1, element)
elem = element.find('XXXX').find('YYYY')['href']
総括メモ
これらの API 操作を組み合わせてコーディングすることによって、動的サイト(JS)を含めたスクレイピング処理が可能になる。ただし、Selenium は「サイトの構造」、「取得対象データのボリューム」、「動的要素の有無」などを十分に検討してから採用することが望ましい。また Selenium はブラウザを操作するため、ローカル環境のリソースを多く消費する。そのため、スクレイピング処理が膨大な場合や、複雑な階層構造のページを扱う場合、実行時間や運用面で課題が生じ易くなってしまった。
コメント(一覧)