この記事では、RubyとSeleniumによりスクレイピングについて説明しています。
前提条件
- MacBook Air M2
- Ruby Version 3.1.3
Selenium WebDriverの準備
今回のスクレイピングでは、Selenium WebDriverを使用していきます。
https://www.selenium.dev/documentation/webdriver/
Selenium WebDriverを使えば、RubyやPythonなどのプログラミング言語を通じてブラウザの自動操作をすることが可能です。
$ gem install selenium-webdriver
ソースコード
require "selenium-webdriver"
require 'net/http'
# Chromeブラウザを起動
driver = Selenium::WebDriver.for :chrome
# スクレイピングでデータを取得したいサイトに移動
driver.navigate.to "https://xxxx.com"
# `id`と`password`いうnameを持つ要素を取得
id = driver.find_element(:name, 'id')
password = driver.find_element(:name, 'password')
# `Hello WebDriver!`という文字を、上記で取得したinput要素に入力
id.send_keys "xxx@xxx.com"
password.send_keys "password"
# ログインボタンを取得してClickする。
login_button = driver.find_element(:id, 'log_in')
login_button.click
sleep(3)
h3_element = driver.find_elements(:css, 'h3')
puts h3_element
sleep(3)
# ブラウザを終了させる
driver.quit
ソースコードの説明
Cookieの有効化(必要に応じて)
Chromeを起動し、Googleに移動することを確認します。
次にログイン画面に遷移します。
サイトによっては、ここでCookieを有効にする必要があるので、有効にしていきます。
options.add_argument('--enable-automation')
options.add_argument('--start-maximized')
options.add_preference(:general, 'default_content_setting_values.cookies', 1)
ログインIDとパスワードの入力
続いてログインIDとパスワードを入力していきます。
user_id = driver.find_element(:name, 'id')
password = driver.find_element(:name, 'password')
driverはSelenium WebDriverのインスタンスで、ブラウザを自動操作するために使用されます。
find_element メソッドによって、取得したページのIDとパスワードの要素を取得していきます。
ここはサイトによってHTMLの要素は異なるのでサイトに合わせて修正してください。
ログインボタンの入力・押下
login_button = driver.find_element(:id, 'log_in')
login_button.click
続いてログインボタンの要素を取得して押下します。
ログイン後の動作
sleep(3)
# 表示されたページの要素をコンソールに出力
h3_element = driver.find_elements(:css, 'h3')
puts h3_element
sleep(3)
# ブラウザを終了させる
driver.quit
ログイン後のページの要素を確実に取得するため、3秒間待機させます。
取得できたことが確認できたら、driver.find_elementsで要素を取得しコンソールに表示させます。
サイトによってはスクレイピング防止のため、短期間に高頻度リクエストをするIPを制限する場合があります。
この制限を回避するために
- IPアドレスを複数用意する
- 繰り返しスクレイピングする場合には、期間を空ける
といった対策をしていけるとよいでしょう。
詳しくは下記の記事を読むと詳しく理解できると思うので参考にしてください。
https://qiita.com/kobayashi-masayuki/items/0640a3dd5b12205f3b52