WebDriverって何?
正確にはSelenium WebDriverのことで、ブラウザを制御するためのフレームワークでFirefox,Chromeなどのブラウザに対応しています。対応している言語はJava、C#、Ruby、Python、JavaScriptの5種類です。
これさえあれば面倒なログインやその他の単調な作業を自動化することができます。私が使っているのはTokyoTechPortalという東工大生用のWebページにアクセスする際に、マトリクス認証という面倒な認証をするときに使っています。(それ以外使っていない。)
今回はPythonでのコードで説明をします。
インストール
ここからダウンロードして各自頑張ってください。
Googleで検索してみる
#-*-coding: utf-8-*-
from selenium import webdriver
driver = webdriver.Chrome() #Chromeを操作
driver.get('https://www.google.co.jp') #開くURLを記入
entry = driver.find_element_by_name('q') #検索フォームの名前を指定
entry.send_keys("traP") #検索キーワードを記入
btn = driver.find_element_by_name("btnG") #検索ボタンを指定
btn.click() #クリック
これを実行してあげるとブラウザは勝手に検索フォームに文字を打ってくれて、検索ボタンまで押してくれます。
検索するだけじゃ楽しくないですね。なので今回はatcoderという競技プログラミングのサイトに使おうと思います。
(atcoderに登録していない方は こちらから登録してください)
問題はabc029のA問題です。与えられた文字列の末尾に"s"を付け足して出力しろという問題です。
この問題の答えは簡単で 、print( raw_input() + "s") です。
さあ、提出しましょう。提出の手順はログイン→提出です。各ページにおいて,それぞれWebページ内のどこに何を記入するか指定してあげるだけです。HTMLがよくわからないという方も気合で何とかわかると思います。(私もHTMLをまともに読んだことがわかりませんが気合で何とかしました。)
こちらがソースコードです
#-*-coding: utf-8-*-
from selenium import webdriver
import time
driver = webdriver.Chrome() #Chromeを操作
driver.get('http://abc029.contest.atcoder.jp/login') #ログインURLを記入
entry = driver.find_element_by_name("name") #ユーザー名の欄を指定
entry.send_keys("username") #この場合はusernameがユーザー名
entry = driver.find_element_by_name("password") #パスワードの欄を指定
entry.send_keys("password") #この場合はpasswordがパスワード
btn = driver.find_element_by_xpath('//*[@id="outer-inner"]/div[2]/div[1]/form/fieldset/div[3]/button') #ログインボタンをxpathで指定
btn.click() #ログインボタンをクリック
time.sleep(1) #ページを開くまで時間がかかるので取り敢えず1秒停止
driver.get('https://abc029.contest.atcoder.jp/submit') #提出ページを開く
entry = driver.find_element_by_name("language_id_1480") #使用言語のフォームを指定
entry.click() #フォームをクリック
entry = driver.find_element_by_xpath('//*[@id="submit-language-selector-1480"]/option[8]') #pythonの欄をxpathで指定
entry.click() #pythonの欄をクリック
entry = driver.find_element_by_name("source_code") #ソースコードのフォームを指定
entry.send_keys('print( raw_input() + "s" ) ') #ソースコードを打ち込む
btn = driver.find_element_by_xpath('//*[@id="outer-inner"]/div[2]/div/form/fieldset/div[4]/button') #提出ボタンをxpathで指定
btn.click() #ボタンをクリック
どうでしょうか、とっても簡単でしょう。
他にも応用が利きますので是非使ってみてください。
実際に動かした動画がこちらです。