Pythonでテスト自動化ツールselenium WebDriverを操作する方法
スポンサーリンク
このドキュメントの内容は、以下の通りです。
はじめに
コンピュータを使うことで得られるメリットの1つとして、面倒な作業の自動化があると思います。時間をかけて、同じようなことをやり続けるよりも、プログラムなどを書いて、人間が努力するのではなく、CPUに任せておけば良いケースもあるでしょう。ITの世界では、RPA (ロボティック・プロセス・オートメーション)が流行っているようです。認知技術を使って、業務の効率化や自動化ができるようです。手動でやっていたものを RPA に置き換えた、という話も聞いたことがあります。
RPA は、ウェブのアプリケーション以外も自動化できるし、操作はプログラミングなしに記述できたりして、便利です。それに比べると、RPA よりに比べると selenium は旧時代の遺物になってしまったのかもしれませんが、今回は、 selenium を使って、ウェブツールの自動化をしちゃおうという話です。何か特別なことがあるわけではなく、昔からできたことを書いているだけです。
selenium とは、テストを自動化するツールです。selenium を使用すると webのテストを自動化できます。selenium の WebDriver を使うと、Python などからブラウザを操作できます。
selenium は、ブラウザを操作するので、たいていのウェブページを操作できるでしょう。
firefox や chrome を操作することができます。メモですが、 PhantomJS のサポートは deprecated になっているようです。chromedriver をヘッドレス(ブラウザのウィンドウなし)に使用することもできます。
なお、テストを自動化するだけでなく
- ショッピングサイトのセール時に目的の商品を購入する
- ディズニーランドのレストランを予約する
- 病院を予約する
人気のものを買う、人気の予約を取る、というのは、ほかの人との競争なので、スピードが命だったりします。人がコンピュータに勝つのは難しいので、コンピュータにはコンピュータで対策するしかありません。
ブラウザを使うメリット
curl などのコマンドでは、JavaScript が動作しないので、JavaScript が必須なサイトではスクレイピングをするのが難しいです。ブラウザを操作することで、画面が見えて、デバッグがしやすく、JavaScript も動作するので、JavaScript が必須なサイトでは、有効です。
事前準備
- Python の selenium モジュールをインストールする
- chromedriver をダウンロードする
seleniumモジュールのインストール
pip コマンドで python モジュールの selenium をインストールします。sudo pip install selenium
chromedriverのダウンロード
chromedriver は、 ダウンロードページ からダウンロードできます。- Mac 用
- Linux 用
- Windows 用 がありますので、お使いの環境にあったものをダウンロードしてください。
サンプルプログラム
ここでは、 chromedriver を実行し、Google を開いて、microsoft を検索する、といったものを自動化します。python を起動して、以下のコードを直接打ち込むか、ファイルに保存して、python の引数として指定して実行することができます。
from selenium import webdriver browser = webdriver.Chrome("/path/to/chromedriver.exe") browser.get('https://www.google.com') input = browser.find_element_by_name('q') input.send_keys('microsoft') input.submit()
JavaScript の用に DOM にアクセスできます。
a = browser.find_elements_by_tag_name('a')
タグの href や text を簡単に取得できます。
a[0].get_attribute('href') a[0].get_attribute('text')
a タグを検索して、 click()_ を呼べば、クリックできます。
browser.close() でタブを閉じることもできます。
ヘッドレスで操作する方法
ヘッドレスでブラウザを動作させる(ブラウザのウィンドウは描画されないモード)には、ヘッドレスのオプションをつけるだけで、実現できます。これを知らなくて、何時間か無駄にしました・・・。
chromedriver.exe なのは、 Windows 10 の環境で試したからです。適当な名前に変えて下さい。
#!/usr/bin/env python # vim:fenc=utf-8 import os import time from selenium import webdriver from selenium.webdriver.chrome.options import Options if __name__ == '__main__': try: options = Opetions = Options() chrome_path = './chromedriver.exe' options.add_argument('--headless') # ブラウザを起動して、 Google を開く browser = webdriver.Chrome(chrome_options=options, executable_path=chrome_path) browser.get('https://www.google.com') time.sleep(1) # Google で検索して、ブラウザタイトルを表示する search_word = 'google' search_input = browser.find_element_by_name('q') search_input.send_keys(search_word) search_input.submit() time.sleep(1) print(browser.title) # ブラウザを終了する browser.quit() except: import traceback traceback.print_exc() finally: print('done')
NTLMなページを開く方法
NTLM 認証が必要なサイトを開く場合は、URLにIDとパスワードを指定すれば、開くことができます。userとpasswordは、適当に読み替えてください。browser.get('https://user:password@www.foo.com')これで、認証が必要なページも簡単に開くことができます。
ログインを自動化する
ウェブサイトのログインページで、IDとパスワードの入力を自動化することもできます。やり方を簡単に書くと
- IDのinputタグを検索して、 send_keys で ID を入れます。
- passwordのinputタグを検索して、 send_keys で password を入れます。
- 「ログイン」ボタンを検索して、 submit() します。
ページのデータをスクレイピングする
html の タグ、id, class など指定して、エレメントからテキストデータなどを抜き出すことができます。抜き出したテキストを python の print関数やファイルを開いて、書き込むことで、スクレイピングも簡単にできます。まとめ
- ブラウザの操作を自動化して、作業を自動化することができる
- selenium webdriver を使えば、chromedriver を操作できる
- ヘッドレス(headless)モードを使えば、ウィンドウを描画せずに、バックグラウンドで仕事をさせておける
- アドフラウドで使われてそう...。
- 超便利ですね。
スポンサーリンク
スポンサーリンク
いつもシェア、ありがとうございます!
もっと情報を探しませんか?
関連記事
最近の記事
- パナソニック ジェットウォッシャードルツ EW-DJ61-Wのホースの修理
- LinuxセキュリティモジュールIntegrity Policy Enforcement
- アマゾンのEcho Show 5を買ったのでレビューします
- アマゾンのサイバーマンデーはAlexa Echo Show 5が安い
- Android スマートフォン OnePlus 7T と OnePlus 7の違い
- Android スマートフォン OnePlus 7 をAndroid10にアップデートしてみた
- クレジットカードのバーチャルカードの比較のまとめ
- 活動量計 Xiaomi Mi Band 4を買ってみたのでレビュー
- Android スマートフォン OnePlus 7 のレビュー
- AliExpressでスマートフォンを買い物してみた
- パソコンのホコリ対策 レンジフードフィルターと養生テープ
- 80PLUS GOLDのPC電源ユニットAntec NeoEco 750 Goldのレビュー
- イギリスの付加価値税 VAT は払い戻しを受けられる
- イギリスのロンドンでスーツケースなど荷物を預けられる場所は
- イギリスのロンドンで地下鉄やバスに乗るならオイスターカードを使おう
- イギリスのヒースロー空港からロンドン市内への行き方
- 航空便でほかの航空会社に乗り継ぎがある場合のオンラインチェックイン
- SFC会員がANA便ではなくベトナム航空のコードシェアを試して解ったこと
- ベトナムの入国審査でeチケットの掲示が必要だった話
- シアトルの交通ICカードはオルカカード(Orca)です
人気のページ
- Windows7 IME 辞書ツールで単語の登録に失敗しました
- C言語 popen()でコマンドを実行して出力を読み込む
- Windows7で休止状態にする方法
- CentOS MySQLの起動、停止、再起動
- loggerコマンドでsyslogにエラーを出力する方法
- パソコンパーツの買取をしてくれる店のまとめ
- Java Mapの使い方 get(),put(),remove(),size(),clear()
- 楽天のRポイントカードを作ってみた
- iPhone 5 から iPhone 6 に乗り換えたのでレビュー
- netstatコマンドのステータスの意味
スポンサーリンク
過去ログ
2020 : 01 02 03 04 05 06 07 08 09 10 11 122019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12