概要
特に優先度高くないものだけど、いちいちブラウザ操作してるものって多々あるよね。
ビジネス職でもエンジニアでもブラウザって必ず操作するはずです。
Seleniumとは
Webブラウザを使ってWebアプリケーションをテストするツールです。
見たほうが早いと思うのでスクショ!
- Qiitaのログインページに遷移
- ログイン情報の入力
- いいねをつけたい記事に遷移
- いいねをする
具体的に何が自動化できるの?
- 定期的に見ているデータの取得
- 情報メディア
- SNS
- ECサイト
- ブラウザを人間が叩いて行う簡単なフローのテスト
#インストール
事前にChromedriverをダウンロードしとく
解凍したものを$home/binに配置
サンプルコード
require 'dotenv'
require 'selenium-webdriver'
# ENVの読み込み
Dotenv.load
QIITA_LOGIN_EMAIL = ENV['QIITA_LOGIN_USER_NAME']
QIITA_LOGIN_PW = ENV['QIITA_LOGIN_PW']
# QIITAのログインページのURL
LOGIN_URL = 'https://qiita.com/'
class QiitaCrawlUser
attr_reader :driver, :target_url
def initialize(target_url)
@target_url = target_url
@driver = Selenium::WebDriver.for :chrome # ここでブラウザ指定
@driver.manage.timeouts.implicit_wait = 10 # 10.seconds
end
def like
login
puts "like start"
driver.navigate.to target_url
parent_classes = driver.find_elements(:class => "likable")[0].attribute('class')
return if parent_classes.split(" ")[2] == 'liked'
driver.execute_script "document.getElementsByClassName('likable')[0].children[1].click();"
driver.quit
end
private
def login
puts "login start"
driver.navigate.to LOGIN_URL #ログイン画面に繊維
driver.find_element(:name, 'identity').send_keys(QIITA_LOGIN_EMAIL)
driver.find_element(:name, 'password').send_keys(QIITA_LOGIN_PW)
driver.find_element(:name, 'commit').click
end
end
article_url = "https://qiita.com/tomerun/items/9cb81d7a98150ff22f53"
QiitaCrawlUser.new(article_url).like
組み合わせると便利 Slack
僕はgemの 'slack-ruby-client'を使ってSlackへポストすることはよくやりますね。
自動化した時に監視や認知は必須なので。。。
Twitterで特定の単語とってくるとかAPIを用いてごにょごにょのときによく使う。
require 'slack-ruby-client'
Slack.configure do |config|
config.token = ENV['SLACK_API_TOKEN']
end
slack_oauth = Slack::Web::Client.new
slack_oauth.chat_postMessage(channel: '#times_watch_twitter', text: '送りたいメッセージ', unfurl_links: true, as_user: true)
unfurl_links: trueにするとリンクが展開されるようになるので、リンクだけ送る用途はよく使います。
最後に
やるからには全部自動化したほうが良くて。
人間がやらなくていいことは自動化しましょ!