feature image

2015年12月12日 | ブログ記事

WebDriverでブラウザを自動化

Web

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()                                             #ボタンをクリック


どうでしょうか、とっても簡単でしょう。

他にも応用が利きますので是非使ってみてください。

実際に動かした動画がこちらです。

https://youtu.be/AYQzv2CDSEc

kriw icon
この記事を書いた人
kriw

CTFを少しやっています。

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2023年12月11日
DIGI-CON HACKATHON 2023『Mikage』
toshi00 icon toshi00
2021年8月12日
CPCTFを支えたWebshell
mazrean icon mazrean
2021年5月19日
CPCTF2021を実現させたスコアサーバー
xxpoxx icon xxpoxx
2022年9月26日
競プロしかシラン人間が web アプリ QK Judge を作った話
tqk icon tqk
2024年3月15日
個人開発として2週間でWebサービスを作ってみた話 〜「LABEL」の紹介〜
Natsuki icon Natsuki
2023年10月20日
DIGI-CON HACKATHON 参加記事「Comic DoQ」
mehm8128 icon mehm8128
記事一覧 タグ一覧 Google アナリティクスについて 特定商取引法に基づく表記