seleniumを使う目的は、beautifulsoupがページの情報を取得するだけであるので<a>のようなLinkが設定されていないとLink先の情報が取得できないのに対し、ボタンクリックやフォーム入力によって次のページに遷移するような形のページに対して利用できるという点になるのだと思います。
ここではWindows10での設定と簡易動作までを説明します。
まずはPhantomJSのインストールとパスの設定をします。
パスの設定とはpythonとPhantomJSを紐づけることです。
PhantomJS | PhantomJS
からPhantomJSをダウンロードします。特に"ダマシ"はないので画面に従ってDownloadできると思います。
記事執筆時点ではv2.1.1です。 (phantomjs-2.1.1-windows.zip)
ダウンロードした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を入れようと思います。
ここでは、
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も試してみた。
退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング
- 作者: Al Sweigart,相川愛三
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/06/03
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (5件) を見る
firefox用のselenium driverは↓
github.com
これも同様に、実行ファイルを
C:\ProgramData\Anaconda3
にコピーすればよい。(firefox https://www.mozilla.org/ja/firefox/new/ がインストールされている前提)
firefoxを使う場合は上のコードでブラウザ指定を書き換える。
browser = webdriver.Firefox()
firefoxの場合は画面がでるブラウザなので、画面が立ち上がってくる。