プログラミング言語知識0からRuby+Seleniumを使用したブラウザ自動操作の実装を行えるようになるまで ④

※seleniumを始めたい方向けにruby + selenium webdriverチュートリアルという記事もあります。。

※この記事はベステンダンクスタッフの記事です

前回はとりあえず書いたコードによってgoogleを開いて検索する所までを紹介しましたが、実際に様々なブラウザでの業務を行う上でこれが自動化出来たらな〜、って作業があるか考えてみました。そして前の職場で行なっていたウェブサイトで公開中の商品を定価からセール価格へ変更する作業は非常に面倒な繰り返し作業だった事を思い出します。

画像1

こちらがその編集画面。作業手順としては、
・販売価格の金額を左の通常価格にコピーペースト
・販売価格を値引きする金額に電卓で計算した数値を入力
商品1点に対して行う作業はこの2手順ですが、これを多い時は数100商品分繰り返す必要があります。コピペして電卓を使って計算してパソコンに戻って、、、正直これは結構めんどくさいです。

この作業はコードを作成する事で自動で完了させる事が出来ます。
コピペを行う必要も電卓を使う必要もありません。使用するコードは下記の通りです。本当はこの前にログインしたりなんだりってコードがあるのですが今回はこのページで計算を経て更新を完了するまでの作業のコードです。

Encoding.default_external = Encoding::UTF_8
require 'selenium-webdriver'
require 'bigdecimal'
d = Selenium::WebDriver.for :chrome

d.find_element(:class, 'list').find_elements(:tag_name, 'tr')[1..-1].each do |tr|
  price  = tr.find_elements(:tag_name, 'td')[6].find_element(:tag_name, 'input').attribute("value")
  tr.find_elements(:tag_name, 'td')[5].find_element(:tag_name, 'input').clear
  tr.find_elements(:tag_name, 'td')[6].find_element(:tag_name, 'input').clear
  tr.find_elements(:tag_name, 'td')[7].find_element(:tag_name, 'input').clear
  tr.find_elements(:tag_name, 'td')[5].find_element(:tag_name, 'input').send_keys(price)
  tr.find_elements(:tag_name, 'td')[6].find_element(:tag_name, 'input').send_keys((price.to_i * BigDecimal("0.7")).floor)
end

順に説明して行きます。私の知識です。
今回は商品の価格を30%OFFにする作業です。

1: UTF_8ってエンコードを使用できるようにする為の呪文
2: selenium-webdriverを使用できるようにする為の呪文
3: 正常な計算結果を出す為のbigdecimalと言うやつを使用できるようにする為の呪文
4: d という「変数」にselenium-webdriverを使う為の呪文を入れる

6行目以降はザックリ行きます。
・販売価格の欄の金額をpriceという変数に入れる
・通常価格、販売価格、会員価格の欄を空欄にする
・通常価格の欄にpriceに入っている数値を入力する
・販売価格の欄にpriceの数値に0.7をかけた数値(30%OFF)を入力する
・上記作業を全ての行で行う
という流れです。

これを実行すると...

画像2

見てくださいよ!このスピード!
人間のなせる技ではありません。

ハッキリ言いまして、上記は殆ど大浦さんに書いてもらったコードです。
この時なんでこう書けばこうなるのか全然わかっていませんでした。
しかし実際に長年やっていたあんなに面倒だった作業を一瞬でしかも計算ミスを絶対にしないという、優秀な人材を雇ったと同等どころか比較にならないのスピードでの作業効率超絶UPが達成できたわけです。これは本当に感動しました。Ruby凄い!Selenium凄い!

そして上記コードをもとに学習を再開します。
動いている様子はわかったので、順に何が起こっているのかを整理していきます。ここで使われているのは、each, attribute, clear, send_keys, to_i, BigDecimalなどなど、、、やりたい動作をさせる為に学ぶべき事がゴロゴロ出て来ました...

次回はそこらへんを紹介して行こうかと思います。

山崎