min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

macOS + Python3 で Selenium(Chrome)を確実に動かす手順

Seleniumを使ってブラウザを自動操作する。いくつか注意点があって、これをクリアしないといつまで経ってもSeleniumが動かなくてヤッキリすることになる。

 

<結論>

 ① chromedriver は、今使ってるChrome用のを使う。なければ直近のChrome用を使う

 ② Python3ではpip3とcondaの両方でseleniumをインストールしとけば間違いない

  $ pip3 install selenium

  $ conda install selenium

 ③ chromedriver はimportしない。ローカルにダウンロードしておいてソースの中で指定してやると間違いなく動く

 

以下、具体的に見ていく。 

① chromedriver は、今使ってるChrome用のを使う。なければ直近のChrome用を使う

まず、自分の今使っているChromeのバージョンを調べる。

f:id:min117:20200929084854p:plain

85.0.4183.121(64ビット)であることが分かる。

 

しかし最新のChromedriverサイトは、Chromeバージョン85の末尾が121に対応したものなんて無い

chromedriver.chromium.org

 

代わりに85.0.4183.83 用ならあることが分かる。これを使う

f:id:min117:20200929085017p:plain

このとき注意なのが違うバージョンのChrome用のを使わないこと。

 

今回で言うと86.0.4240.22というのもあったけど

f:id:min117:20200929101314p:plain

これだと、使っているChromeのバージョン(85.0.4183.83)では絶対に動かない。

 

「ChromeDriver 85.0.4183.83」をクリックすると

f:id:min117:20200929085116p:plain

「chromedriver_mac64.zip」があるのでダウンロード&解凍する。

f:id:min117:20200929102025p:plain

解凍後のファイルは触らないで置く。pythonのソースの中で指定するから。

② Python3ではpip3とcondaの両方でseleniumをインストールしとけば間違いない

$ pip3 install selenium

f:id:min117:20200929085347p:plain

てやると素のpython3環境にseleniumが入っちゃうから

 

anacondaの環境のpython3で呼ぶとエラーになる。

f:id:min117:20200929091453p:plain

 

anaconda環境にもseleniumを入れちゃえばOK。

$ conda install selenium

f:id:min117:20200929091536p:plain

③ chromedriver はimportしない。ローカルにダウンロードしておいてソースの中で指定する

要は

>>> import chromedriver_binary

じゃダメだから(condaの環境依存で動かないことがある)、

>>> driver = webdriver.Chrome('./chromedriver')

にすべしってこと。

 

サンプルソースはここのの写しなんだけど

qiita.com

 

これを.pyファイルに書くんじゃなく1行ずつ実行していくのがポイント。

f:id:min117:20200929103905p:plain

やってみる。

まずはpython3を起動。

f:id:min117:20200929104058p:plain

1行ずつコードを入れてコンソールが正しく(エラーなく)返ってくるかを見ながら進める。

f:id:min117:20200929104335p:plain

 

ここで

import chromedriver_binary

実行しない

 

代わりに

>>> driver = webdriver.Chrome('./chromedriver')

としてやると、それだけでChromeが起動する

f:id:min117:20200929104720p:plain

 

ポイントは今自分がコンソール(python3)を実行している場所(pwdで分かる)にchromedriverがダウンロードされていて

f:id:min117:20200929102025p:plain

ソース(1行ずつ書く)のココ↓

>>> driver = webdriver.Chrome('./chromedriver')

でそれを指定してやるってとこ。

 

もしフルパスで書くならこう↓してやれば

>>> driver = webdriver.Chrome('/Users/bash/Downloads/chromedriver')

しっかりChromeが起動する。

f:id:min117:20200929105230p:plain

 

ここまでくれば、コマンドで自由にChromeを操作できるようになる。

例えば

>>> driver.get("https://www.google.co.jp")

とすれば、googleが起動する。

f:id:min117:20200929105517p:plain

f:id:min117:20200929112518g:plain

 

<コピペ用>

(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

f:id:min117:20200929090305p:plain

f:id:min117:20200929091636p:plain

f:id:min117:20200929091104p:plain

f:id:min117:20200929091852p:plain

 

 

参考)

qiita.com