ECSでPythonとSeleniumでスクレイピング、イメージをpython:3.9-slimにすると「unknown error: cannot find Chrome binary」のエラー

恐れ入ります。
現在、ECS上でPythonとSeleniumでスクレイピングするプログラムを運用しており、これまで問題なく動作していました。

今回コンテナイメージサイズが大きかったため、「python:3」を指定していたのを、「python:3.9-slim」に変更しました。

不足しているパッケージ等は、requirements.txt内に記述し、インストールさせています。

requirements.txt

certifi==2020.4.5.1 chardet==3.0.4 selenium==3.141.0 chromedriver-binary==106.0.5249.61 common==0.1.2 idna==2.9 mysql-connector-python==8.0.20 protobuf==3.12.2 requests==2.23.0 selenium==3.141.0 six==1.15.0 urllib3==1.25.9 paramiko

また、DockerFile内に以下の記述を追加しており、Chromeもインストールされている認識です。

DockerFile

FROM python:3.9-slim WORKDIR /usr/src/app COPY requirements.txt ./ ~~~~~~~~~~~~~~~~~~~~ 中略 ~~~~~~~~~~~~~~~~~~~~ RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \ dpkg -i google-chrome-stable_current_amd64.deb; apt-get -fy install

実現したいこと

python:3.9-slimに変更してもエラーが出ず動作するようにしたい。

発生している問題・エラーメッセージ

Message: unknown error: cannot find Chrome binary

該当のソースコード

Python

from selenium import webdriver from selenium.webdriver.support.select import Select from selenium.common.exceptions import NoSuchElementException import chromedriver_binary ~~~~~~~~~~~~~~~~~~~~ 中略 ~~~~~~~~~~~~~~~~~~~~ # WebDriverの設定 common_ini.logging.info('WebDriverの設定を開始します。') try: option = webdriver.ChromeOptions() option.add_argument('--headless') option.add_argument('--no-sandbox') prefs = {'download.default_directory': csvPath} option.add_experimental_option('prefs', prefs) driver = webdriver.Chrome(options=option) driver.get(settings.url) driver.implicitly_wait(120) # 読み込み待ち時間 except Exception as e: common_func.ErrMessChat('WebDriverの設定中にエラーが発生しました。', str(e)) errorF = True else: common_ini.logging.info('WebDriverの設定が完了しました。')

試したこと

該当のソースコードに、以下を追加

Ptyhon

option.binary_location = '/usr/src/app/'

ただ、以下のエラーが出てしまう。

Message: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/src/app/ is no longer running, so ChromeDriver is assuming that Chrome has crashed.)

この場合、以下のオプションを追加すると解決する旨の情報も見つけましたが、すでに添付したように記載してあります。

option.add_argument('--headless')

以上です。
どうぞよろしくお願いします。

コメントを投稿

0 コメント