LoginSignup
59
64

More than 5 years have passed since last update.

[Ruby] seleniumでChromeを使ってWebスクレイピング

Last updated at Posted at 2018-10-09

環境

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G65

$ ruby -v 
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17]

下準備

  • GoogleChromeのインストール
  • chromedriverのダウンロード
  • selenium-webdriver(gem)をインストール

1. GoogleChromeのインストール

GoogleChrome公式

  • 最新版のchromeを上記サイトからダウンロード&インストール
  • インストールしたアプリを起動(デフォルトブラウザ設定/レポート送信等はお好みで)

2. chromedriverのダウンロード/パスを通す

2-1. ファイルダウンロード
GUIの場合:
http://chromedriver.storage.googleapis.com/index.html

  • LATEST_RELEASEディレクトリに、最新のディレクトリの記載があるので、そのバージョンをダウンロード
  • 2.42(10/09時点)

CUIの場合:

  $ curl -O -L http://chromedriver.storage.googleapis.com/2.42/chromedriver_mac64.zip # -> カレントディレクトリ配下にダウンロード
    ※ダウンロードURLはバージョンに合わせてよしなに調べて下さい
  $ unzip chromedriver_mac64.zip
  $ rm chromedriver_mac64.zip

2-2. ファイルを移動

  $ sudo mv ['解凍したchromedriver'] /usr/local/bin

2-3. パスを通す

  $ export PATH="/usr/local/bin:$PATH"

2-4. 確認

  $ which chromedriver
  --> /usr/local/bin/chromedriver

3. selenium-webdriver(gem)をインストール

3-1. selenium-webdriverインストール

  • Gemファイルを使う場合
gem 'selenium-webdriver' # この記載を追加
$ bundle install
  • 直接インストールする場合
$ gem install selenium-webdriver

3-2. 確認

$ gem list | grep selenium-webdriver
-> selenium-webdriver (3.12.0) ※特定のバージョンが良い場合はよしなに指定

コード

require 'selenium-webdriver'

@wait_time = 3 
@timeout = 4

# Seleniumの初期化
# class ref: https://www.rubydoc.info/gems/selenium-webdriver/Selenium/WebDriver/Chrome
Selenium::WebDriver.logger.output = File.join("./", "selenium.log")
Selenium::WebDriver.logger.level = :warn
driver = Selenium::WebDriver.for :chrome
driver.manage.timeouts.implicit_wait = @timeout
wait = Selenium::WebDriver::Wait.new(timeout: @wait_time)

# Yahooを開く
driver.get('https://www.yahoo.co.jp/')

# ちゃんと開けているか確認するため、sleepを入れる
sleep 2

#**
  # ブラウザでさせたい動作を記載する

  # ex. 検索欄に'Ruby'と入力して、検索ボタンを押す処理

  # 検索欄/検索ボタン取得
  begin
    search_box = driver.find_element(:id, 'srchtxt') # 検索欄
    search_btn = driver.find_element(:id, 'srchbtn') # 検索ボタン
  rescue Selenium::WebDriver::Error::NoSuchElementError
    p 'no such element error!!'
    return
  end

  # 入力欄に'Ruby'を入力し、検索ボタンを押下
  search_box.send_keys 'Ruby'
  search_btn.click
#**

# ドライバーを閉じる
driver.quit

スクリーンショット 2018-10-09 12.29.57.png

スクリーンショット 2018-10-09 12.43.59.png

注意点


log_file = File.join('./', "function.log")
@log = Logger.new(log_file)

def log(msg)
  @log.debug(msg)
end

参考

ドライバーでの処理について(操作方法をまとめてくれてます)

まとめ

仕事でよく使う機会があるので、備忘も兼ねて書きました。
覚えてしまえば、簡単にスクレイピング出来るので重宝しています。
cronとDBを組み合わせれば、データを定期的に取ってきて保存しておいて、機械学習なんかにも使えるので便利ですね。

59
64
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
59
64