python + selenium + phantomjs で楽をする
最近、書いてきたプログラムの再利用性を高めるために、備忘録を書きたくなった。
第一段として、私が一昨年、お世話になったseleniumの備忘録です。
ウェブページのテスト自動化などでよく使われるseleniumをpythonから使うと、利便性が上がる。
そして、ここにphantomjsを足すと、GUIを介さずにseleniumが使えて、利便性がさらに上がる。
ということなので、現時点(2016/04/15)での備忘録を残す。
環境
- python 3.5.0
- node.js v5.6.0
seleniumのインストール
pip install selenium
phantomjsのインストール
2017/11/21追記 ここから
初掲時、この追記文の後に書いているように、npm
でphantomjsをインストールする方法を書きましたが、
バイナリを落としてきて、スクリプト内で指定した方がお手軽だったので、そちらの方法も追記しておきます。
- Download|PhantomJSのページからそれぞれの環境に合わせたphantomJSのバイナリファイルを落としてくる。
- 展開したフォルダの中の
bin
フォルダ内のphantomjs
(windows版はphantomjs.exe
)を下のスクリプトと同じ階層に入れる。 - プログラムのところで載せているコードのdriverの部分のコードを以下のようにする。
driver = webdriver.PhantomJS(
executable_path='./phantomjs'
)
- これで
phantomjs
のインストールは終わりです。
2017/11/21追記 ここまで
npm install -g phantomjs
phantomjsのインストール後は、"source ~/.bashrc"などで、パスを通しておくのを忘れずに!
※私の環境では、これでphantomjsのインストールが上手くいったのだけど、調べていたところ、
これで上手くいかない人もいたよう…(nodeのバージョン違いが原因だとは思うけど)。
その場合には、npm install -g phantom
をすると上手くいったという人もいた。
プログラム
#!python #-*-coding:utf-8-*- from selenium import webdriver from selenium.webdriver.common.keys import Keys as keys import time def main(): url = "https://www.google.co.jp/" word = "日本" driver = webdriver.PhantomJS() driver.get(url) print(driver.current_url) # print(driver.page_source) # page_source # input searching words input_word = driver.find_element_by_css_selector("input.lst") input_word.send_keys(word) input_word.send_keys(keys.ENTER) time.sleep(2) driver.save_screenshot("test.jpg") # capture result page driver.quit() print("end") if __name__ == '__main__': main()
動作内容は、google.co.jpにアクセスして、"日本"を検索し、ページ遷移する。
そして、そのページのスクショをtest.jpgとして保存する。
test.jpgはこんな感じ↓
chromeの Developer Tools とかで、該当箇所の情報を確認して、
find_element_by_css_selector(複数該当がある場合は、find_elements_by_css_selector)
に指定したら、ほとんどの要素のセレクトは大丈夫な気がする。
ただし、今回OSXでプログラムを書いてたら、chromeでgoogle.co.jpにアクセスしたときと、
phantomjsでgoogle.co.jpアクセスしたときで、idとclassが違っていたため、エラーを何度か吐かれた。
そのときには、コメントアウトしている"driver.page_source"で確認してみると原因が分かるかも…