動かざることバグの如し

近づきたいよ 君の理想に

RubyでHeadless Chromeを操作してスクレイピング

環境

概要

RubyスクレイピングするならMechanize一択だが、昨今のサイトではJavascriptが動かないとデータが取れないサイトも多い。

PhantomJSが死んでしまった今、Headless Chromeが1番いいのだが、Puppeteerはちょっと、、て時にRubyでやりたいて時にselenium-webdriverを使ってスクレイピングをしてみたメモ

インストール

必要なものは以下

Chrome

先に動かすサーバーにChrome、ないしはChromiumが必要

ChromeDriver

Chromeを操作するのに必要

https://sites.google.com/a/chromium.org/chromedriver/

selenium-webdriver

これはGemなのでbundle init して bundle add selenium-webdriver でおk

コード

Yahooにアクセスしてスクリーンショットを取るだけのシンプルなサンプルコードは以下

require "selenium-webdriver"

ua = "Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"
options = Selenium::WebDriver::Chrome::Options.new(
  binary: "/Applications/Chromium.app/Contents/MacOS/Chromium",
  args: ["--headless", "--disable-gpu", "window-size=1280x800"],
)
driver = Selenium::WebDriver.for :chrome, options: options
driver.navigate.to "https://www.yahoo.co.jp"
puts driver.title
driver.save_screenshot("ss.png")

で実行するとスクリーンショットが取れているはず

f:id:thr3a:20190810142622p:plain