実現したいこと
EC2で selenium(4.26.1) を動かしたい・・のですがエラーの原因がわかりません
似たような対応をされた方がおられましたら、対応方法を共有いただけますでしょうか?
または・・
ここが怪しい??と思われる箇所がありましたらご指摘いただければ
大変助かります
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
【ローカル環境】
・Python 3.11
・Selenium 4.26.1
・mac OS
・chrome 手動でダウンロード(Version: 130.0.6723.116)
・chromeのパスは直接指定
・ドライバは、selenium が自動で取得なので、設定してません
⇨ 4.xx ~ 以降の新しいバージョンではchrome のバージョンに合う
ドライバを取得する様です
下記からDL
https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.116/mac-x64/chrome-mac-x64.zip
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
【EC2環境】
・Python 3.11
・Selenium 4.26.1をインストール
・chrome は手動でダウンロード(Version: 130.0.6723.116)
・chromeのパスは直接指定
・ドライバは、selenium が自動で取得なので、設定してません
・webdriver_managerは入れてません
・linux には chrome のインストールしておりません
下記からDL
https://storage.googleapis.com/chrome-for-testing-public/130.0.6723.116/linux64/chrome-linux64.zip
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
【実行結果 & 動作確認】
ローカルでは動きました・・がEC2ではエラーが出ます
色々調べてみると、chrome のバージョンと、ドライバのバージョンが違う時に
出るみたいです・・がバージョンは合ってます
EC2側で、ディレクトリを作成して、ここにlinux 向けのchrome を配置
スクリプト側で、ここを指定してます
実行すると、chrome driver を自動で取得して
xxxxx/xxxxx/.cache/selenium/ ***** に配置されているのが確認できてます
しかし、エラーが消えません
オプションを変更したり
下記を追加してみましたが、何も変化がありません・・・
from fake_useragent import UserAgent
options.add_argument("--user-agent=" + UserAgent(os="windows").chrome)
【.cache 以下に配置されています 】
/xxxx/.cache/selenium/chrome/linux64/120.0.6099.109/chrome
/xxxx/.cache/selenium/chromedriver/linux64/120.0.6099.109/chromedriver
11/11 追記・・
最初はEC2側にgoogle chrome をインストールしました・・が
バージョン確認をするとエラーとなり
正しくインストールされていない様なので削除しているのが
今の環境となります
【chrome の確認 】
[コマンド] google-chrome --version
⇨ /xxxx/google-chrome: symbol lookup error: /usr/bin/google-chrome: undefined symbol: cupsUserAgent
[コマンド] which google-chrome
⇨ /xxxx/google-chrome
11/11 追記・・
①下記追加しても変化なし
userdata_dir = 'UserData' # カレントディレクトリの直下に作る場合
os.makedirs(userdata_dir, exist_ok=True)
options.add_argument('--user-data-dir=/home/ec2-user/' + userdata_dir)
options.add_argument('--profile-directory=Default')
②下記追加すると、タイムアウトエラーが出ます
options.add_argument("--remote-debugging-pipe")
③selenium のバージョンを 4.22.0 に変更しても変化ありません・・
11/11 追記
ここに、かなり似た症状のケースがあり
このやりとりと同じ事を対応しました・・・が結果は変わらずです
ここでのやり取りでの、結果もかなり似てました
https://github.com/SeleniumHQ/selenium/issues/14219
最後の方で、chrome for test に問題があるかどうか?わからない・・と言ってます
I noticed in this comment #14219 (comment) that you mentioned you are using CFT
version of google chrome. I don't know if that can be related to the problem or not.
【Chrome for Testing】
https://googlechromelabs.github.io/chrome-for-testing/
11/12 追記
google chromeを手動でDLして、EC2にアップしたのは
EC2側に正しくchrome がインストールされていない??様なのが
背景にあります
【AWSサポートからの返信】
あくまで 1 エンジニアとして当該パッケージに関して簡単ではございますが調査した結果を参考としてお伝えさせていただきます。
エラーはCUPS(ネットワークプリンタ関連のパッケージ)に関連するもの。
Amazon Linux 2の最新のCUPSパッケージバージョンは1.6.3-51[コマンド] yum list cups
利用可能なパッケージ
cups.x86_64 1:1.6.3-51.amzn2.0.5Chrome は9月下旬に cupsUserAgent() のチェックを行うようになったようです。
https://chromium.googlesource.com/chromium/src/+/9cde337915612235f6467f96e4a8df9b813c148f
・cupsUserAgent()はバージョン1.7以降で利用可能となった模様。
https://www.cups.org/doc/cupspm.html#cupsUserAgent以上から、現時点で Amazon Linux 2 で提供されているパッケージだけを利用して Chrome を利用することは難しいと考えます。
対応として、以下などが考えられます。
- Amazon Linux 2 に CUPS1.7 以上のパッケージを CUPS 公式など外部からパッケージ導入またはコンパイル導入する。
※ 先述の通り、外部パッケージ導入に関してのご支援は行なっておりません。
2. 古いバージョン Chrome の導入をお試しいただく。
※ セキュリティの観点からお勧めはいたしません。また、古いバージョン Chrome が提供されているかは提供元にご確認ください。
3. 他のディストリビューション (RHEL9 など) をご利用いただく。
※ Amazon Linux 2023 は CUPS2.3 が採用されておりますが、GUI 環境は提供されておりません。
https://github.com/amazonlinux/amazon-linux-2023/issues/47
【chromeが正しくインストールされてるか?】
サポートからの情報共有の通り、cupsUserAgent に問題がある様です
[コマンド] /xxxx/z_keys/chrome-linux64/130_0_6723_116/chrome --headless=new --no-sandbox --single-process --disable-dev-shm-usage
[コマンド] /xxxx/z_keys/chrome-linux64/130_0_6723_116/chrome --headless
[コマンド] /xxxx/z_keys/chrome-linux64/130_0_6723_116/chrome --headless=new
⇨ /xxxx/z_keys/chrome-linux64/130_0_6723_116/chrome: symbol lookup error: /xxxx/z_keys/chrome-linux64/130_0_6723_116/chrome: undefined symbol: cupsUserAgent
発生している問題・分からないこと
session not created: DevToolsActivePort file doesn't exist
このエラーの原因が特定できません
エラーメッセージ
error
1Traceback (most recent call last): 2 File "/xxxx/batch_files/scraping/selenium_test.py", line 136, in <module> 3 main() 4 File "/xxxx/batch_files/scraping/selenium_test.py", line 83, in main 5 driver = webdriver.Chrome(options=options) 6 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 7 File "/xxxx/.pyenv/versions/3.11.5/lib/python3.11/site-packages/selenium/webdriver/chrome/webdriver.py", line 45, in __init__ 8 super().__init__( 9 File "/xxxx/.pyenv/versions/3.11.5/lib/python3.11/site-packages/selenium/webdriver/chromium/webdriver.py", line 66, in __init__ 10 super().__init__(command_executor=executor, options=options) 11 File "/xxxx/.pyenv/versions/3.11.5/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 238, in __init__ 12 self.start_session(capabilities) 13 File "/xxxx/.pyenv/versions/3.11.5/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 325, in start_session 14 response = self.execute(Command.NEW_SESSION, caps)["value"] 15 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 16 File "/xxxx/.pyenv/versions/3.11.5/lib/python3.11/site-packages/selenium/webdriver/remote/webdriver.py", line 380, in execute 17 self.error_handler.check_response(response) 18 File "/xxxx/.pyenv/versions/3.11.5/lib/python3.11/site-packages/selenium/webdriver/remote/errorhandler.py", line 229, in check_response 19 raise exception_class(message, screen, stacktrace) 20selenium.common.exceptions.SessionNotCreatedException: Message: session not created: Chrome failed to start: exited normally. 21 (session not created: DevToolsActivePort file doesn't exist) 22 (The process started from chrome location /xxxx/.cache/selenium/chrome/linux64/130.0.6723.116/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
該当のソースコード
python
1import time 2from selenium import webdriver 3 4from selenium.webdriver.chrome.service import Service 5# from webdriver_manager.chrome import ChromeDriverManager 6 7#----------------------------------------------------------------- 8# selenium | スクレイピング 9#----------------------------------------------------------------- 10def main(): 11 12 #------------------------------------------------------------- 13 # オプション 14 #------------------------------------------------------------- 15 options = webdriver.ChromeOptions() 16 17 options.add_argument('--headless=new') 18 options.add_argument('--no-sandbox') # Chromeの保護機能を無効 19 options.add_argument('--single-process') #分散処理をさせすぎないようにする。 20 options.add_argument('--disable-dev-shm-usage') # ディスクのメモリスペースを使う 21 # chromeの実行ファイルが格納されているパスを指定する 22 # local 23 # options.binary_location = '/Users/xxxx/Desktop/works/python/130_0_6723_116/chrome-mac-x64/google_chrome.app' 24 # EC2 25 options.binary_location = '/xxxx/z_keys/chrome-linux64/130_0_6723_116/chrome' 26 27 28 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 29 # driver は入れない 30 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 31 # service = Service( 32 # executable_path=r'/xxxx/z_keys/chromedriver-linux64/130_0_6723_116/chromedriver' 33 # # executable_path=r'/xxxx/z_keys/chromedriver-linux64/130_0_6723_116/chromedriver.exe' 34 # ) 35 # service = Service('/xxxx/z_keys/chromedriver-linux64/130_0_6723_116/chromedriver') 36 37 #------------------------------------------------------------- 38 # クロームの立ち上げ 39 #------------------------------------------------------------- 40 # driver = webdriver.Chrome() 41 driver = webdriver.Chrome(options=options) 42 # driver = webdriver.Chrome(service=service, options=options) 43 44 #------------------------------------------------------------- 45 # 動作確認 46 #------------------------------------------------------------- 47 url = "https://dev.classmethod.jp/" 48 driver.get(url) 49 50 time.sleep(3) 51 52 title = driver.title 53 print(f"{title=}") 54 driver.quit()
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
chrome と chrome ドライバのバージョンが違う事で起こる様ですが、linux を見るとあってます
selenium は xxx/.cache/selenium/ **を見ている様です・・が
他が影響しているのでしょうか?
補足
特になし
回答1件
あなたの回答
tips
プレビュー