スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに

コンピュータを使うことで得られるメリットの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 をダウンロードする
ここでは、 chromedriver を使用するため、 chromedriver をダウンロードします。ほかのブラウザを使用したい場合は、ほかのものをダウンロードしてください。chromedriver 以外の場合は、ソースコードも変更する必要が一部あります。

seleniumモジュールのインストール

pip コマンドで python モジュールの selenium をインストールします。
sudo pip install selenium

chromedriverのダウンロード

chromedriver は、 http://chromedriver.chromium.org/downloads からダウンロードできます。
  • Mac 用
  • Linux 用
  • Windows 用 がありますので、お使いの環境にあったものをダウンロードしてください。
zip をダウンロードしたら、 unzip (解凍) して、 chromedriver.exe を適当なディレクトリにおいて下さい。

サンプルプログラム

ここでは、 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)モードを使えば、ウィンドウを描画せずに、バックグラウンドで仕事をさせておける
  • アドフラウドで使われてそう...。
  • 超便利ですね。

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

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

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー