概要
PythonのSeleniumはウェブ上のサイトを自動で探索する。それを利用して必要なデータを自動的に取得するプログラムをつくる。
今回はSeleniumの使用する環境構築を主として述べる。
Seleniumのテスト試験として次のようなプログラムを作成する。つまり、Googleのホームページに入って、検索欄に「ゼロからはじめるPython」を入力して、検索ボタンを押すというものである。
さらに、よく使う機能をまとめる。
# test.py import time from selenium import webdriver # 1) Initialize Chrome # DRIVER_PATH is dependent on your environment. DRIVER_PATH = '/Users/USERNAME/opt/anaconda3/lib/python3.7/site-packages/chromedriver_binary/chromedriver' driver = webdriver.Chrome(DRIVER_PATH) # 2) Open the Google page driver.get('https://www.google.com') #### Fig.1 # 3) Wait until the page time.sleep(3) # 4) Get an object of the search box q = driver.find_element_by_name('q') # 5) Send the key to the search box q.send_keys('ゼロからはじめるPython') #### Fig.2 # 6) submit the form q.submit() # 7) Wait in 10 seconds time.sleep(10) #### Fig.3 # 8) Finalize the driver driver.quit()
実行結果
(1) Googleのホームページが自動的に立ち上がる
Fig.1
(2) 検索欄に「ゼロからはじめるPython」が自動的に入る
Fig.2
(3) 自動的にクリックされて検索結果が表示される
Fig.3
(4) 10秒待って、終わるページが消える
はじめに
動機:
カード残高をWeb上から確認しようとするとき、いちいちログインとパスワードを入力しなければなりません。それがとてもめんどくさいので「ターミナルからコマンドをワンクリックすれば、自動でログインとパスワードを入力してWeb上に入って、カード残高のデータを引っ張っていくことはできないのだろうか」と思って調べました。
そのようなWeb上のデータを取得することをスクレイピングというそうです。そのスクレイピングをおこなうためのツールがSeleniumというものです。
環境構築の方法
Seleniumを使うための準備の仕方です。参考にしてみてください。
STEP 1: Google Chromeをインストール
まずは、Google Chromeをインストールしてください。
Google Chrome をダウンロードしてインストールする - パソコン - Google Chrome ヘルプ
SeleniumはChromeだけでなくSafariでもFirefoxでも対応していますので、Chromeをインストールしなくても他のブラウザからおこなうことは可能です。私は最初「Chromeなんかでするものか! Safariでやってやる!」と思って始めてみたのですが、ネット上にあるSeleniumの記事の多くはChromeですので、ここは断腸の思いでChromeをインストールしました。
STEP 2: pipでseleniumおよびchromedriver-binaryをインストール
次にseleniumモジュールとchromedriver-binaryモジュールをインポートします。
それにはいくつかの方法がありますが、pipコマンドで次のようにすると簡単です(ただしpipコマンドがあることが前提ですが。なければpipコマンドのインストールにまで戻ることになります)。
$ pip install selenium $ pip install chromedriver-binary
chromedriver-binary
はpip install chromedriver-binary==NumberOfChromeVersion>
でバージョン指定もできますが、そのままとりあえずはやってみて、うまくいかなったときにバージョンを指定してみてください。
STEP 3: chromedriverの場所を見つける。
Seleniumを使うときはchromedriver
というものを使います。これはインストールしたchromedriver_binary
モジュール(インストールするときはハイフン(-)ですが、モジュール名ではアンダーバー(_)です)の中にあります。そこでchromedriver
を使うためには、これのありか(パス)を指定しなければなりませんので、chromedriver
のパスを特定します。
次のようにしておこなうとchromedriver
のパスを特定することができると思います。
3.1: Finderからcommand + Fを押す(Find)
Finderからcommand + Fを押す(Find)またはFinder -> File -> Find
3.2: Searchボックスに「chromedriver」と検索する
Searchボックスに「chromedriver」と入力すると、chromedriverが表示される。
3.3: chromedriverをクリックして、パスを右クリックする
chromedriver
をクリックすると下の方にそれのありかが示されます。
下のほうにあるchromedriver
を右クリックすると表示されます。
3.4: 「Copy "chromedriver" as Pathname」をクリック
Copy "chromedriver" as Pathname
をクリックすると chromedriver
のパスが得られます。
これで欲しかったパスが得られます。どこかのメモ帳にペーストして保存しておきましょう。
STEP 4: テストソースを書く
インストールが無事にできたのかどうかを確認するために、次のテストプログラムを書いて実行してみてください。ただし、DRIVER_PATH
はSTEP3で取得したパスです。
# test.py import time from selenium import webdriver # 1) Initialize Chrome # DRIVER_PATH is dependent on your environment. DRIVER_PATH = '/Users/USERNAME/opt/anaconda3/lib/python3.7/site-packages/chromedriver_binary/chromedriver' driver = webdriver.Chrome(DRIVER_PATH) # 2) Open the Google page driver.get('https://www.google.com') #### Fig.1 # 3) Wait until the page time.sleep(3) # 4) Get an object of the search box q = driver.find_element_by_name('q') # 5) Send the key to the search box q.send_keys('ゼロからはじめるPython') #### Fig.2 # 6) submit the form q.submit() # 7) Wait in 10 seconds time.sleep(10) #### Fig.3 # 8) Finalize the driver driver.quit()
このテストプログラムは次のようなものです。つまり、まずChromeが自動的に動作して、Googleのホームページにアクセスして、検索欄に「ゼロからはじめるPython」を入力して、そのあとクリックされて検索結果のページに移ります。それでしばらくしてChromeは終了してページは消えます。
インストールがうまくいけばそのような動作をします。それは冒頭の実行結果のようになります。
これでSeleniumの環境構築ができました。
うまくいかなかった場合の対処法
テストプログラムがうまくいかなかった場合、その原因は次のようなものが考えられます。
(1) chromedriver
のパスが異なる
(2) 次のように変更する。
Before: webdriver.Chrome(DRIVER_PATH)
After: webdriver.Chrome(executable_path=DRIVER_PATH)
(3) パスをDRIVER_PATH = r'/Users/USERNAME/opt/anaconda3/lib/python3.7/site-packages/chromedriver_binary/chromedriver'
と書いて試してみる
(4) chromedriver
のバージョンとGoogle Chromeのバージョンが異なる
バージョンが異なっている場合、次のようなエラーが生じます。
..... ..... selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 83
よく使うテクニック
いつかまとめる。