Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

環境

$ 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を組み合わせれば、データを定期的に取ってきて保存しておいて、機械学習なんかにも使えるので便利ですね。

y-agatsuma
日記感覚で書いていきまっす
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした