Seleniumを使ってブラウザを自動操作する。いくつか注意点があって、これをクリアしないといつまで経ってもSeleniumが動かなくてヤッキリすることになる。
<結論>
① chromedriver は、今使ってるChrome用のを使う。なければ直近のChrome用を使う
② Python3ではpip3とcondaの両方でseleniumをインストールしとけば間違いない
$ pip3 install selenium
$ conda install selenium
③ chromedriver はimportしない。ローカルにダウンロードしておいてソースの中で指定してやると間違いなく動く
以下、具体的に見ていく。
① chromedriver は、今使ってるChrome用のを使う。なければ直近のChrome用を使う
まず、自分の今使っているChromeのバージョンを調べる。
85.0.4183.121(64ビット)であることが分かる。
しかし最新のChromedriverサイトは、Chromeバージョン85の末尾が121に対応したものなんて無い。
代わりに85.0.4183.83 用ならあることが分かる。これを使う。
このとき注意なのが違うバージョンのChrome用のを使わないこと。
今回で言うと86.0.4240.22というのもあったけど
これだと、使っているChromeのバージョン(85.0.4183.83)では絶対に動かない。
「ChromeDriver 85.0.4183.83」をクリックすると
「chromedriver_mac64.zip」があるのでダウンロード&解凍する。
解凍後のファイルは触らないで置く。pythonのソースの中で指定するから。
② Python3ではpip3とcondaの両方でseleniumをインストールしとけば間違いない
$ pip3 install selenium
てやると素のpython3環境にseleniumが入っちゃうから
anacondaの環境のpython3で呼ぶとエラーになる。
anaconda環境にもseleniumを入れちゃえばOK。
$ conda install selenium
③ chromedriver はimportしない。ローカルにダウンロードしておいてソースの中で指定する
要は
>>> import chromedriver_binary
じゃダメだから(condaの環境依存で動かないことがある)、
>>> driver = webdriver.Chrome('./chromedriver')
にすべしってこと。
サンプルソースはここのの写しなんだけど
これを.pyファイルに書くんじゃなくて1行ずつ実行していくのがポイント。
やってみる。
まずはpython3を起動。
1行ずつコードを入れてコンソールが正しく(エラーなく)返ってくるかを見ながら進める。
ここで
import chromedriver_binary
は実行しない。
代わりに
>>> driver = webdriver.Chrome('./chromedriver')
としてやると、それだけでChromeが起動する。
ポイントは今自分がコンソール(python3)を実行している場所(pwdで分かる)にchromedriverがダウンロードされていて
ソース(1行ずつ書く)のココ↓
>>> driver = webdriver.Chrome('./chromedriver')
でそれを指定してやるってとこ。
もしフルパスで書くならこう↓してやれば
>>> driver = webdriver.Chrome('/Users/bash/Downloads/chromedriver')
しっかりChromeが起動する。
ここまでくれば、コマンドで自由にChromeを操作できるようになる。
例えば
>>> driver.get("https://www.google.co.jp")
とすれば、googleが起動する。
<コピペ用>
(anaconda3-4.2.0) [bash Downloads]$ python3
Python 3.5.2 |Anaconda 4.2.0 (x86_64)| (default, Jul 2 2016, 17:52:12)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> from selenium import webdriver
>>>
>>> from selenium.webdriver.common.keys import Keys
>>>
>>> from time import sleep
>>>
>>> driver = webdriver.Chrome('./chromedriver')
>>>
>>> driver = webdriver.Chrome('/Users/bash/Downloads/chromedriver')
>>>
>>> driver.get("https://www.google.co.jp")
>>>
>>> search = driver.find_element_by_name('q')
>>>
>>> search.send_keys("セレニウム 自動化")
>>>
>>> search.send_keys("Keys.ENTER")
>>> search.send_keys(Keys.ENTER)
>>>
>>> element = driver.find_element_by_partial_link_text("第1回")
>>> element.click
<アンチパターン>
ちなみに、やっても意味ないことは以下。pip3とcondaの混在だとchromedriverの指定バージョンを入れれなかったり、入れてもpython3から見えなかったりする。
$ sudo pip3 install chromedriver-binary==85.0.4183.87.0
参考)