質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%

Q&A

解決済

1回答

364閲覧

EC2(linux2)でselenium(4.26.1)を実行。session not created:DevToolsActivePort file doesn't exist エラーが解決できない

hidesroon

総合スコア2

0グッド

0クリップ

投稿2024/11/10 08:05

編集2024/11/13 01:24

実現したいこと

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.5

Chrome は9月下旬に cupsUserAgent() のチェックを行うようになったようです。
https://chromium.googlesource.com/chromium/src/+/9cde337915612235f6467f96e4a8df9b813c148f
・cupsUserAgent()はバージョン1.7以降で利用可能となった模様。
https://www.cups.org/doc/cupspm.html#cupsUserAgent

以上から、現時点で Amazon Linux 2 で提供されているパッケージだけを利用して Chrome を利用することは難しいと考えます。
対応として、以下などが考えられます。

  1. 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/ **を見ている様です・・が
他が影響しているのでしょうか?

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2024/11/10 17:14

質問に掲載しているのは、「Linuxでエラーになるプログラム」じゃなくて「Macで動いているプログラム」では?23行目がMac用ですね。 > ・linux には chrome のインストールしておりません と書いてあるので、「エラーになるのは当然」と思ったのですが、その後ろに、 > EC2側で、ディレクトリを作成して、ここにlinux 向けのchrome を配置 > スクリプト側で、ここを指定してます と矛盾したことが書いてあります。 これは試行錯誤前と後を併記したということですかね? 今のLinux上の状況について、 ・直近の状態を正確に ・直近のプログラムをコピペ ・エラーメッセージ全文をコピペ(エラーの画像掲載は止めましょう) それと別の話として、直近に至るまでの途中経過があるのなら、 ・どういう環境で ・どういうプログラムを実行して ・どういう結果になって ・どういう対策をしてどういう結果になったか。 を書くとより良いです。
hidesroon

2024/11/11 00:52

ご確認ありがとうございます。スクリプトのEC2側をopenにして修正しました。動いていない方ほEC2側です。追記となるのですが・・・、EC2側でGoogle Chrome を最初はインストールしておりました。その後、バージョン確認をすると、synbol lookup error が出ました。aws に問い合わせをすると、 下記のような回答をいただきました。AWS側の環境にはマッチしないバージョンのファイルが 最新のGoogle Chrome には入っている様です >> ・エラーはCUPS(ネットワークプリンタ関連のパッケージ)に関連するもの。 >> ・Amazon Linux 2の最新のCUPSパッケージバージョンは1.6.3-51 なので、一旦EC2側のChrome を削除して、手動でダウンロードしたChrome を解凍して EC2側にフォルダを作ってそこに配置する・・現在に至ります
otn

2024/11/11 16:35 編集

最新版のChromeが動かないと言うことであれば、古いバージョンを指定して「OS標準のパッケージ管理ツール」でインストーすすれば良いだけで、「一旦EC2側のChrome を削除して、手動でダウンロードしたChrome を解凍してEC2側にフォルダを作ってそこに配置する」のような事をする必要はありません。 OS標準のパッケージ管理外でのインストールは、それによって発生するかも知れない不具合に対応できる自信がある場合だけです。まあ、問題が起こるとは限らないので、起こらないことに命を賭けてやってみても良いですが。
otn

2024/11/11 16:22 編集

ChromeとChromeDriverのバージョンを気にされているようですが、今のSeleniumの場合、 ・ChromeDriverはChromeのバージョンにあった物を自動的にダウンロードして使用するので、自分でChromeDriverをインストールする必要はない ・初心者の場合は「する必要がない」ではなくて「してはいけない」と思うべき なので、 > 色々調べてみると、chrome のバージョンと、ドライバのバージョンが違う時に出るみたいです というのは、かなり古い情報のページを見たのでしょうね。というか、Seleniumのバージョンがかなり古い記事のはずです。そんな物を参考にしてはいけません。 もし自分でダウンロードしたChromeDriverがあるなら、完全に削除しましょう。「完全に削除」です。
otn

2024/11/11 16:38 編集

シェルのコマンドラインで、下記で起動しますかね?エラー終了した場合は、オプションを見做しましょう。 あるいはChromeのインストールがうまく行っていないのかも知れません。 /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless=new --no-sandbox --single-process --disable-dev-shm-usage Chromeが正しくインストールされていれば、少なくとも下記では動くはず。 /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless か /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless=new
hidesroon

2024/11/12 00:56

ご確認ありがとうございます >> /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless=new --no-sandbox --single-process --disable-dev-shm-usage >> /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless >> /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless=new こちら動かすと、どれも同じ結果となりました 後ほどスクショを貼ります >> /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome: symbol lookup error: /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome: undefined symbol: cupsUserAgent cupsUserAgent・・が悪さしてるっぽいです これは、AWSサポートからの返信にありました このスレッドにも記載しておりますが、いただいた情報の一部を記載しておりますので 全て記載させていただきます。 しばらくお待ちください・・
otn

2024/11/12 08:53

> 後ほどスクショを貼ります ですが、 > ・エラーメッセージ全文をコピペ(エラーの画像掲載は止めましょう) と書いたのを無視しないでいただきたい。画像の中の文字列は読みにくいので、原則として読みません。ブラウザなどGUI画面ならやむを得ないですが。 ライブラリがらみかどうかは知りませんが、もしそう思うのなら、独自インストールしたChromeは完全に削除した上で(「また使うかも」と思うのならその時改めてダウンロード・インストールすれば良いだけです)、OS標準のライブラリ管理ツールでインストールしましょう。これも、 > ・初心者の場合は「する必要がない」ではなくて「してはいけない」と思うべき と書いたとおりです。
hidesroon

2024/11/13 01:02

ご確認ありがとうございます 色々とご指摘ありがとうございます スクショの指摘ですが、見落としておりました・・ 後で削除しておきます・・ 手動で入れたchrome は削除しておきます 今回アドバイスいただきました chrome を直接実行して動作確認する・・方法ですが いい勉強になりました。ありがとうございました >> /home/ec2-user/z_keys/chrome-linux64/130_0_6723_116/chrome --headless
otn

2024/11/13 07:02 編集

一般論ですが、プログラムを書く際に、「今まで自分が経験していない機能・知見の無い機能」を使う際は、まずそれだけの数行のプログラムを書いてみて「自分の経験・知見」に取り込んだ上で、それを使ったプログラムを書きます。 > chrome を直接実行して動作確認する・・方法ですが は、「そもそも、この実行環境(OSとその設定、インストール済みライブラリなど)で、このバージョンのchromeはこのコマンドラインオプションでうまく起動するのか?」を確認しないでその先に進むのは間違っているという指摘です。 短いプログラムだと、一気に実行してみてもうまく行くケースが多いのでそれでも良いのですが、 期待通りの動きでない場合は、スタート地点にもどって一歩ずつ進みます。 「このコードは確実に動く事を確認済みなので自信が持てる」というコードを積み重ねると「確実に動くコード」が出来ます。まあ、組み合わせのロジック(自分がロジックを考えた部分)の間違いはありますが、そこは自分で考えた部分なので、自分で考えれば解決できるでしょう。
hidesroon

2024/11/14 02:54

コメントありがとうございます >> この実行環境(OSとその設定、インストール済みライブラリなど)で >> このバージョンのchromeは >> このコマンドラインオプションでうまく起動するのか? >> を確認しないでその先に進むのは間違っている ここを確認せずに進めていたので どこに問題があるのか?が特定できてませんでした・・ たかが chrome とそのドライバーのインストールですが 3-4日も手こずり、痛い目に遭いました・・が 今回のアドバイスも含め、色々と勉強させていただきました ありがとうございました (o_ _)o))
guest

回答1

0

自己解決

EC2 側で動きました
対応したことは、chrome も ドライバーも自分では入れてません
入れていない・・のはpath 等の指定はしておらず
selenium が両方とも入れてくれました
以下がスクリプトです

options = webdriver.ChromeOptions() options.add_argument('--headless=new') options.add_argument('--no-sandbox') options.add_argument('--single-process') options.add_argument('--disable-dev-shm-usage') options.set_capability('browserVersion', '120') driver = webdriver.Chrome(options=options) url = "https://dev.classmethod.jp/" driver.get(url) time.sleep(3) title = driver.title print(f"{title=}") driver.quit()

オプションの set_apability()にバージョンを120 で指定しました
EC2側の .cache/selenium/ を見ると
chrome と driver が入ってる事が確認できました

/xxxx/.cache/selenium/chrome/linux64/130.0.6723.116/chrome
/xxxx/.cache/selenium/chromedriver/linux64/130.0.6723.116/chromedriver

/xxxx/.cache/selenium/chrome/linux64/120.0.6099.109/chrome
/xxxx/.cache/selenium/chromedriver/linux64/120.0.6099.109/chromedriver

selenium は自分でchrome と driver を撮りに行くみたいです・・が
調べてみても、この1行で全て完結!!の様な記事は
なかなか見つかりません・・

なので、これが偶然動いたのか?
または
本来、この様に記述すべき??
なのかは不明です

この辺りに詳しい方がおられましたら
情報共有いただきたいです

投稿2024/11/12 01:53

編集2024/11/13 01:28
hidesroon

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問