【スクレイピング】DockerコンテナにSeleniumをインストールしてブラウザ操作
前書き
前回Google Colabでchromium-chromedriverとSeleniumを使って、Yahoo! Newsのコメントをスクレイピングしました。
melheaven.hatenadiary.jp
Chromeインストール
以下のようなエラーが出た方はChromeがインストールされていない or PATHが設定されていない人です。
WebDriverException: unknown error: cannot find Chrome binary
まずはChromeのインストールを行います。
ここで「依存型パッケージが入ってない」的なエラーをされた方は以下の記事を参考にしてください。
google-chromeの場所を訪ねた時に/usr/bin/google-chromeに入っているとOKです。
バージョンは今後重要な情報になってきますので、番号をメモしてください。
$ cd /tmp $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb $ sudo apt install --fix-broken ./google-chrome-stable_current_amd64.deb $ which google-chrome /usr/bin/google-chrome $ google-chrome --version Google Chrome 87.0.4280.88
chromedriverインストール
以下のようなエラーが出た方はこれからインストールするchromedriverのバージョンとChromeのバージョンが一致していない人です。
selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 87
以下のサイトからChrome Driverをインストールしますが、今回はCurlでバージョンを指定してファイルを落としてきます。
sites.google.com
だいたい以下の文字列に各自のChromeのバージョンを代入しますが、chromedriverに指定したいバージョンが存在するのか上記のサイトで確認してください。
”https://chromedriver.storage.googleapis.com/(Chromeのバージョン)/chromedriver_linux64.zip”
curlコマンドでzipファイルをダウンロードした後、解凍します。
chromedriverの位置を/usr/local/bin/に落とすことにより、PATH設定が完了します。
バージョンがChromeのバージョンと一致しているか確認してください。
今回の例では"87.0.4280.88"で一致しています。
$ cd /tmp $ curl -O https://chromedriver.storage.googleapis.com/87.0.4280.88/chromedriver_linux64.zip $ unzip chromedriver_linux64.zip $ mv chromedriver /usr/local/bin/ $ which chromedriver /usr/local/bin/chromedriver $ chromedriver -v ChromeDriver 87.0.4280.88 $ chromedriver ChromeDriver was started successfully.
以下、参考にした記事です。
qiita.com
その他モジュールのインストール
以下のエラーが出る場合、まだ足りていません。
Message: Service chromedriver unexpectedly exited. Status code was: 127
libglib・libnss・libgconf・libfontconfigといったモジュールが存在しておらず、chromedriver動作時にエラーが吐いているのではと推測します。
以下の記事を参考にしましたが、それぞれ環境が異なります。
インポート可能なlibglibを探して列挙してくれます。
自分の場合はlibglib2.0-0を選択してダウンロードしました。
libnss・libgconf・libfontconfigの場合でも同様にコマンドを実行しますが、Dockerの場合、libglib2.0-0・libgconf-2-4・libfontconfig1・libnss3をインストールします。
インストールできない場合はlibglib2.0-devなど、末尾にdevが付いているのを選択してみてください。
$ apt search libglib libglib2.0-0/stable,now 2.58.3-2+deb10u2 amd64 [installed] GLib library of C routines libglib2.0-bin/stable,now 2.58.3-2+deb10u2 amd64 [installed,automatic] Programs for the GLib library
スクレイピングまでの道のり
from selenium import webdriver options = webdriver.ChromeOptions() options.add_argument('--headless') options.add_argument('--no-sandbox') options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(executable_path='/usr/local/bin/chromedriver',options=options)