システム部のKです。
最近の仕事では、ブラウザの自動操作ができるSeleniumを使って、Webサイトをいろいろ操作するということをやっています。
テストに使っているわけではなく、人間の仕事の一部でも自動化して、人間の負担を減らそうとするものを作成中です。
Seleniumのプラグラムを書いていて、まどろっこしい点としては、トライ&エラーに時間がかかることでしょうか。
書いたプログラムを実行する度にブラウザが立ち上がり、順番に操作をして進んでいくという流れになるので、後半の方の操作でエラーになって終了してしまった場合、その箇所を再度試すには、前半の方の自動操作を見届けてからでないとたどり着けません。
又、Ajaxがふんだんに使われているWebサイトですと、それも考慮して対応する必要があるので、静的なHTMLのページを自動操作するより、手間が多くなります。
人間が操作する場合、見えない場所にあるものは、見えるようにしてから操作するわけですから、同じようにプログラムする必要があったりします。
自動操作中のウィンドウサイズを手で変更してしまうと、見えているはずのボタンが見えなくなり、エラーになると言う現象にもハマりました。
プログラム自体は一箇所も変更していないのに、結果が変わってしまうので、気づくまではかなり謎でした。
ところで、最近お気に入りのTV番組は「ポツンと一軒家」です。
その中でGoogleマップ上で一軒家にズームインしていく演出があるのですが、それっぽいものをSeleniumを一部使って、アニGIFにしてみました。
人様の家に勝手にズームインするのもおこがましいので、青森県の御倉山にズームインしています。
<code><pre>
require “selenium-webdriver”
driver = Selenium::WebDriver.for :chrome
driver.manage.window.resize_to(1200, 700)
# 青森県の御倉山にズームイン
driver.navigate.to “https://maps.google.co.jp/maps?ll=40.459880,140.910121&t=k&z=18”
sleep(20)
# 左上の検索ボックスのフォーカスを外します
input = driver.find_element(:xpath, ‘//*[@id=”searchboxinput”]’)
driver.action.move_by(input.location.x + 600, input.location.y + 300).click.perform
# ズームアウトしながらスクショ撮影
20.downto(1) do |i|
driver.find_element(:tag_name, ‘html’).send_keys(:subtract)
sleep(10)
driver.save_screenshot(“%02d.png”%[i])
puts i
end
</pre></code>
Seleniumでやっていることは、ズームアウトしながらスクショ撮影しているだけです。
出来上がった画像を、GIFアニにしています。
GIFアニっぽくループにしてみました。
こちらは東京都の市道山です。
始業時間が遅めで、スーツは着ないで済ませたいPHPプログラマの方、ぜひご応募ください!