HerokuでSeleniumを動かしてスクレイピングする方法

ローカルで作成したスクレイピングプログラムをHerokuでも動かしたい場合の方法を解説します。

前提

今回はスクレイピングについてではなく、HerokuでSelneiumを動かす方法について焦点を当てたいので、動かすプログラムは以下のようなごくシンプルなものと仮定します。また仮想環境やHerokuにアップロードする必要があるProcfileやrequirements.txtについては既に用意されているものとします。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://codelabsjp.net")
print(driver.page_source)
driver.quit()
print("完了")

HerokuでSeleniumを動かすために必要なオプションを追加する

SeleniumをHerokuで動かしたい場合、ブラウザはヘッドレス(バックグラウンドで動くブラウザ)に設定しなければなりません。その他にもHerokuの要件を満たす必要があるので、以下のコードを追加します。

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--no-sandbox")

またローカルで動かす場合はdriverのパスを直接指定してやればよかったですが、Herokuでは環境変数を指定しておき、あとでHerokuの方でHerokuサーバー内の具体的なパスを指定します。

chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), chrome_options=chrome_options)

os.environを使用していますので、必要なパッケージもインポートし、最終的なコードは以下のようになります。

from selenium import webdriver
import os
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--headless")
chrome_options.add_argument("--disable-dev-shm-usage")
chrome_options.add_argument("--no-sandbox")
chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), chrome_options=chrome_options)
driver.get("https://codelabsjp.net")
print(driver.page_source)
driver.quit()
print("完了")

Heroku側の設定

上記コード及び必要ファイルをHerokuにデプロイしたらHeroku側でSeleniumの動作に必要な設定をします。なおchrome.driverなどのドライバはHerokuサーバーに既にありますので、アップロードする必要はありません。

環境変数の設定

chrome_options.binary_location = os.environ.get("GOOGLE_CHROME_BIN")
driver = webdriver.Chrome(executable_path=os.environ.get("CHROMEDRIVER_PATH"), 

上記コードで環境変数を設定していたので、環境変数に値を設定します。

Herokuで作成したアプリのSettingsにいき、Config VarsのReveal Config varsをクリックしてください。
そしたら以下のように設定します。(黒枠は無視してください。)

KeyValue
CHROMEDRIVER_PATH/app/.chromedriver/bin/chromedriver
GOOGLE_CHROME_BIN/app/.apt/usr/bin/google-chrome

KeyとValueの組み合わせは上記の通りです。コピーしてご利用ください。

Buildpacksの追加

引き続きSettingsを見るとConfig Varsの少し下にBuildpacksがあると思います。

Add buildpacksをクリックして以下のBuildpacksを追加してください。

  • heroku/python
  • https://github.com/heroku/heroku-buildpack-google-chrome
  • https://github.com/heroku/heroku-buildpack-chromedriver

デプロイする

以上でSeleniumを動かすための設定は完了です。

あとは通常通り、デプロイすればSelneiumが動きます。Herokuへのデプロイ方法についての詳しい説明はここでは行っていないので、わからない方はSelenium python デプロイ等で調べてください。