プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

Seleniumでブラウザの制御

seleniumを使う目的は、beautifulsoupがページの情報を取得するだけであるので<a>のようなLinkが設定されていないとLink先の情報が取得できないのに対し、ボタンクリックやフォーム入力によって次のページに遷移するような形のページに対して利用できるという点になるのだと思います。

ここではWindows10での設定と簡易動作までを説明します。

まずはPhantomJSのインストールとパスの設定をします。
パスの設定とはpythonとPhantomJSを紐づけることです。

PhantomJS | PhantomJS
からPhantomJSをダウンロードします。特に"ダマシ"はないので画面に従ってDownloadできると思います。
記事執筆時点ではv2.1.1です。 (phantomjs-2.1.1-windows.zip)
f:id:s51517765:20180107134758j:plain

ダウンロードしたzipを解凍すると、
\Desktop\phantomjs-2.1.1-windows.zip\phantomjs-2.1.1-windows\bin
の中にPhantomjs.exeがあります。

ぐぐるWindowsでのインストール(主に、pythonからのpathを通す方法について)が出てきますが、うまくいきません。
gist.github.com
pathを通すというのは、要するにpythonからモジュールとしphantomJS(以下PJS)をインポートするにあたって、このPJS本体がどこにあるかを設定することなのですが、なにがどう違うのか?よくわかりません。

そこで、逆転の発想をしました。
python(私の環境ではanaconda)にPJSの場所を設定するのではなく、anacondaが知っている場所にPJSを入れたらいいのではないか?
結果、うまくいきました。

anacondaのrootはanaconda promptを起動したときDefoultで立ち上がる場所です。ここにPJSを入れようと思います。
f:id:s51517765:20180107135658j:plain
ここでは、

C:\ProgramData\Anaconda3

です。
これをwindowsエクスプローラで開き、実行ファイルをコピーします。
(windows10ではこのあたりのフォルダは隠しフォルダになっています。)

コピーできたら、anaconda promptで↓のように実行してphantomjsのversion情報が取得できればこれで設定はOKです。

$phantomjs -v

次に実際にPJSをつかってブラウザの操作をしてみます。
twitterのホームを開き、ログインボタンをクリックしてみます。
PJSはヘッドレスブラウザといって、コマンドで操作するために特化されたブラウザで、よって画面描画しないものです。
これでは、うまく動いたのかどうかが判断できないので、スクリーンショットをとることで動作確認します。
ログインボタンは、browser.find_elements_by_link_text("###")で指定します。

※<code></code>でかこむとグレーの四角でハイライトされる。「code記法」と呼ばれるもの。
本来は<>を半角で書くが、半角で書くとタグとみなされるので説明できない。

おもなCSSセレクタについては↓に例が載っている。
qiita.com
qiita.com

from selenium import webdriver
browser = webdriver.PhantomJS()

url = "https://twitter.com/"
browser.get(url)
browser.save_screenshot("twitter.png") #スクリーンショット
login = browser.find_elements_by_link_text('ログイン') #Linkのテキストを探す
login[0].click() #Linkを踏む
browser.save_screenshot("login.png") #スクリーンショット

↓で例題にもなっているのでfirefoxも試してみた。

firefox用のselenium driverは↓
github.com
これも同様に、実行ファイルを

C:\ProgramData\Anaconda3

にコピーすればよい。(firefox https://www.mozilla.org/ja/firefox/new/ がインストールされている前提)

firefoxを使う場合は上のコードでブラウザ指定を書き換える。

browser = webdriver.Firefox()

firefoxの場合は画面がでるブラウザなので、画面が立ち上がってくる。