まだブラウザ操作の自動化してないの??
概要
特に優先度高くないものだけど、いちいちブラウザ操作してるものって多々あるよね。
ビジネス職でもエンジニアでもブラウザって必ず操作するはずです。
Seleniumとは
Webブラウザを使ってWebアプリケーションをテストするツールです。
見たほうが早いと思うのでスクショ!
- Qiitaのログインページに遷移
- ログイン情報の入力
- いいねをつけたい記事に遷移
- いいねをする
具体的に何が自動化できるの?
- 定期的に見ているデータの取得
- 情報メディア
- SNS
- ECサイト
- ブラウザを人間が叩いて行う簡単なフローのテスト
インストール
- 情報メディア
- 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
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
僕は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にするとリンクが展開されるようになるので、リンクだけ送る用途はよく使います。
最後に
やるからには全部自動化したほうが良くて。
人間がやらなくていいことは自動化しましょ!
Author And Source
この問題について(まだブラウザ操作の自動化してないの??), 我々は、より多くの情報をここで見つけました https://qiita.com/onigirimantarou/items/1a8d0859b69dc74578e1著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .