ページへ戻る
+ Links
印刷
Python/Seleniumの導入
の編集 ::
NJF Wiki
xpwiki
:
Python
/
Seleniumの導入
の編集
Python/Seleniumの導入 の編集
詳細な入力項目を表示
ページタイトル
( 空白で自動設定 )
:
ページ並び順
( 0-9 小数可 標準:1 )
:
ページ別名
(複数は[
改行
]で区切る)
:
ページ内容:
*Seleniumとは [#oce1ae90] Seleniumとは本来は微量元素、セレンのことですが、ここではブラウザをスクリプトから操作するツール群のことです。[[公式ページはこちら:http://www.seleniumhq.org/]]。 これを使うとWebアプリのテストなどの自動化が可能です。 それ以外にも、例えばログインなどの面倒なサイトへ自動ログインして自動で情報の取得、更新ができる自分用のツールを作ったりもできます。 もちろん、コマンドラインだけでログインなども可能なのですが、Javascriptなどで情報のやりとりを行っているサイトも多く、意外にうまくいかないこともあります。かといってディベロッパーツールなどでネットアクセスを解析するのも面倒です。そんなときにはブラウザでアクセスできるSeleniumが便利です。 対応言語はJava、C#、Ruby、Python、Javascripと幅広く、対応ブラウザもChrome、FireFoxなど主なところはだいたい対応していると思ってよいでしょう。 個人的にはログインの面倒なサイトなどの自動化でPythonとChromeの組み合わせで使っており、ここでもその二つを中心に解説します。 *Macでのインストール [#r511c824] SeleniumをPythonで動かすには二つのステップが必要です。 -Seleniumをインストール -ブラウザのドライバーをインストール 他にSeleniumサーバというのもありますが、個人でちょっとしたことに使う分には必要ありません。 **Seleniumをインストール [#v0421e9f] pipに対応しているので、コマンドラインから簡単にインストールできます。 sudo pip install selenium もし「-H」オプションが必要と言われたらつけてください。 sudo -H pip install selenium **ブラウザのドライバーをインストール [#ac8322ad] ブラウザのドライバーはサードパーティーなどによって各ブラウザごとに開発されています。[[こちら:http://www.seleniumhq.org/download/]]のページからダウンロード可能です。 ここではChromeのものをダウンロードしてきます。 解凍したドライバはパスの通った場所に置く必要があります。 または、メンテナンスなどを考えるとリンクの方が楽かも知れません。 ln -s /yourlocationdir/chromedriver /usr/local/bin/chromedriver これで準備は完了です。 *基本的な使い方 [#z5567493] まずインポートします。 from selenium import webdriver 次にドライバーのオブジェクトを取得します。 driver = webdriver.Chrome() この段階で、新しいプロセスでブラウザが立ち上がり、空の画面が表示されます。 移動は driver.get("http://njf.jp") でそのページに移動します。 そのページに表示されている要素の取得も可能で「find_element_by〜」というメソッドで行います。 特によく使うのは、 find_element_by_name find_element_by_id find_element_by_xpath あたりです。それぞれname、id、XPathをもと要素に取得します。XPathとはその文書の要素のパスです。Chromeだとディベロッパーツールの中のエレメントタブから好きなエレメントを右クリックし、「copy」を選ぶとXPathをコピーできます。どの要素でも一意に指定できるので、nameやidで区別できない要素を取得するのに便利です。 &ref(xpath_copy_0.png,mw:480,mh:360); また取得した要素にはsend_keysというメソッドがあり、これによってフォームに値を入力できます。 driver.find_element_by_name("email").send_keys("mymail@mymail.jp") driver.find_element_by_name("password").send_keys("mypassword") 日本語を入力するときはUTF-8を使いましょう。 driver.find_element_by_name("comment").send_keys(u"テストです") ボタンのクリックも可能です。 driver.find_element_by_id("form_button").click() Seleniumはスクレイパーとしての機能はさほど優れてはいないため、情報の取得を行うときは、別途Beautiful Soupなどを使うのがおすすめです。 表示中のhtmlソースはpage_sourceで取得できます。 html = driver.page_source bf = BeautifulSoup(html,"html.parser") 画面を閉じるのはcloseメソッドです。 driver.close() *注意事項 [#kea869af] 注意としては、普段使っているブラウザでもクッキーなどは共有されないようで、ログイン処理などは毎回しなければなりません。 また、起動のたびにプロセスが立ち上がるので、開発中は自分で閉じるのを忘れるとメモリを圧迫するので注意が必要です。 プロセスが終わるとブラウザも落ちてしまうことがあります。その時は以下のような処理を最後に入れて、「q」とコマンドラインで入力するまでプログラムを終了させないようにするとよいでしょう。 print "Type 'q' to end" while True: inputline = raw_input() if inputline == "q": break *まとめ [#x874eeda] Selenium+Pythonだとかなり簡単にブラウザが操作できます。 テストの自動化はもちろん、個人でもたとえば、ちょっとした情報をWebサービスなどで見るのにも、トップページ->ログインページ->ログイン後ページ->目当てのページ、という風にしなければならなかったものを自動化できます。 この程度の処理なら10分ほどで書けてしまうので、普段の面倒な処理の効率化にもおすすめです。
編集の要約:
Q & A 認証:
ページ更新時は次の質問にお答えください。(プレビュー時は必要ありません)
Q:
「東京」の読みがな?(ひらがなで)
A:
お名前:
タイムスタンプを変更しない
テキスト整形のルールを表示する
添付ファイル
:
xpath_copy.png
104件
[
詳細
]