Cloud Functions を用いて selenium でスクレイピングするとき、もともと次の記事を参考にしてました。
https://blowup-bbs.com/gcp-cloud-functions-python3/
もともと個人開発でスクレイピングをしていた時は上記の記事のやり方でうまく動いていたのですが、久々に環境に手を入れたら動かなくなってしまいました。
原因もよくわからない(たぶんライブラリを更新したせい)ため、一から Functions で selenium を用いてスクレイピングする環境を作りました。
まあまあ手間がかかったので備忘録的に記事にします。
手順
前提
ライブラリのバージョン
selenium==4.15.2
Chrome のダウンロードと配置
Cloud Functions 上で selenium でスクレイピングするには headless Chrome と chromedriver が必要です。
ダウンロードするには Index of chromium-browser-snapshots/Linux_x64/ ページから適当なバージョンの Chrome をダウンロードします。
最新バージョンにしたい場合は一番下のほうにある LAST_CHANGE のファイルに記載のバージョンを確認します。
執筆時点での最新バージョンは 1346408 だったのでそのフォルダを開きます。
そこから chrome-linux.zip と chromedriver_linux64.zip をダウンロードして解凍しておきます。
解凍したものをデプロイするディレクトリに配置します。
chrome-linux.zip を解凍したものを丸ごと配置します。
chromedirver もそのまま配置します。
コード
import os
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
options = webdriver.ChromeOptions()
# option は適当につける
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
path = os.getcwd()
driverPath = os.path.join(path, "chromedriver")
headlessPath = os.path.join(path, "chrome-linux/chrome")
options.binary_location = headlessPath
service = Service(driverPath)
driver = webdriver.Chrome(service=service, options=options)
もろもろの Functions を動かす設定は割愛します。