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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

947閲覧

pythonでwebdriverを起動できない

ppap

総合スコア68

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2024/02/03 15:25

実現したいこと

pythonのwebdriverでchromeを起動したいのですが、起動できません。

発生している問題・分からないこと

chromeを起動できないという問題が発生しています。

エラーメッセージ

error

1--------------------------------------------------------------------------- 2SessionNotCreatedException Traceback (most recent call last) 3Cell In[2], line 6 4 3 from time import sleep 5 5 # ウェブドライバーを開く 6----> 6 driver = webdriver.Chrome() 7 8 # 3秒待つ 8 9 sleep(3) 9 10File ~/.local/share/virtualenvs/3.12.0-jEcVHeNf/lib/python3.12/site-packages/selenium/webdriver/chrome/webdriver.py:45, in WebDriver.__init__(self, options, service, keep_alive) 11 42 service = service if service else Service() 12 43 options = options if options else Options() 13---> 45 super().__init__( 14 46 browser_name=DesiredCapabilities.CHROME["browserName"], 15 47 vendor_prefix="goog", 16 48 options=options, 17 49 service=service, 18 50 keep_alive=keep_alive, 19 51 ) 20 21File ~/.local/share/virtualenvs/3.12.0-jEcVHeNf/lib/python3.12/site-packages/selenium/webdriver/chromium/webdriver.py:61, in ChromiumDriver.__init__(self, browser_name, vendor_prefix, options, service, keep_alive) 22 52 executor = ChromiumRemoteConnection( 23 53 remote_server_addr=self.service.service_url, 24 54 browser_name=browser_name, 25 (...) 26 57 ignore_proxy=options._ignore_local_proxy, 27 58 ) 28 60 try: 29---> 61 super().__init__(command_executor=executor, options=options) 30 62 except Exception: 31 63 self.quit() 32 33File ~/.local/share/virtualenvs/3.12.0-jEcVHeNf/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py:209, in WebDriver.__init__(self, command_executor, keep_alive, file_detector, options) 34 207 self._authenticator_id = None 35 208 self.start_client() 36--> 209 self.start_session(capabilities) 37 38File ~/.local/share/virtualenvs/3.12.0-jEcVHeNf/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py:293, in WebDriver.start_session(self, capabilities) 39 286 """Creates a new session with the desired capabilities. 40 287 41 288 :Args: 42 289 - capabilities - a capabilities dict to start the session with. 43 290 """ 44 292 caps = _create_caps(capabilities) 45--> 293 response = self.execute(Command.NEW_SESSION, caps)["value"] 46 294 self.session_id = response.get("sessionId") 47 295 self.caps = response.get("capabilities") 48 49File ~/.local/share/virtualenvs/3.12.0-jEcVHeNf/lib/python3.12/site-packages/selenium/webdriver/remote/webdriver.py:348, in WebDriver.execute(self, driver_command, params) 50 346 response = self.command_executor.execute(driver_command, params) 51 347 if response: 52--> 348 self.error_handler.check_response(response) 53 349 response["value"] = self._unwrap_value(response.get("value", None)) 54 350 return response 55 56File ~/.local/share/virtualenvs/3.12.0-jEcVHeNf/lib/python3.12/site-packages/selenium/webdriver/remote/errorhandler.py:229, in ErrorHandler.check_response(self, response) 57 227 alert_text = value["alert"].get("text") 58 228 raise exception_class(message, screen, stacktrace, alert_text) # type: ignore[call-arg] # mypy is not smart enough here 59--> 229 raise exception_class(message, screen, stacktrace) 60 61SessionNotCreatedException: Message: session not created: Chrome failed to start: exited normally. 62 (session not created: DevToolsActivePort file doesn't exist) 63 (The process started from chrome location /home/ユーザ名/.cache/selenium/chrome/linux64/121.0.6167.85/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.) 64Stacktrace: 65#0 0x55998f296d93 <unknown> 66#1 0x55998ef7a337 <unknown> 67#2 0x55998efaebc0 <unknown> 68#3 0x55998efaa765 <unknown> 69#4 0x55998eff4b7c <unknown> 70#5 0x55998efe81e3 <unknown> 71#6 0x55998efb8135 <unknown> 72#7 0x55998efb913e <unknown> 73#8 0x55998f25ae4b <unknown> 74#9 0x55998f25edfa <unknown> 75#10 0x55998f2476d5 <unknown> 76#11 0x55998f25fa6f <unknown> 77#12 0x55998f22b69f <unknown> 78#13 0x55998f284098 <unknown> 79#14 0x55998f284262 <unknown> 80#15 0x55998f295f34 <unknown> 81#16 0x7efc746ddac3 <unknown>

該当のソースコード

python

1# インポート 2from selenium import webdriver 3from time import sleep 4 5# ウェブドライバーを開く 6driver = webdriver.Chrome() 7 8# 3秒待つ 9sleep(3) 10 11# ブラウザを閉じる 12driver.quit()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

様々なバージョンのwebdriverをインストールしましたが、どれも上手くいきませんでした。
別端末で同じことをした場合問題なく動作したので、何が原因なのか分からず苦戦しています。

補足

Windowsのサブシステムでlinuxを使用しています。

<windowsについて>
プロセッサ 11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz 2.80 GHz
実装 RAM 16.0 GB (15.7 GB 使用可能)
デバイス ID EC0EC83A-6D92-43DB-8AB7-E80A16D1C315
プロダクト ID 00342-21984-78425-AAOEM
システムの種類 64 ビット オペレーティング システム、x64 ベース プロセッサ
ペンとタッチ このディスプレイでは、ペン入力とタッチ入力は利用できません

<linuxについて>
・ubuntsu 22.04.3 LTS

<chromeについて>
・chromeのバージョンは、121.0.6167.140(Official Build) (64 ビット)
・webdriverのバージョンは、121.0.6167.85 (r1233107)
※ webdriverは、"C:\chromedriver-win64\chromedriver.exe"に格納しています。

<python環境について>
・pipenvで作成した仮想環境で「3.12.0」バージョンを使用しています。
・コードはvscodeで記載し、実行しています。

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

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

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

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

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

hiroki-o

2024/02/03 21:29

別端末では、WSLのUbuntuからWindowsのwebdriverとChromeを起動したということでしょうか? その際の手順を確認して、何か抜けているのかも知れません。エラーからはUbuntuのwebdriverとChromeを起動しようとしているように見えます。 (自分で試していないので、具体的なアドバイスができなくて申し訳ない)
otn

2024/02/04 02:02

WSL2環境下での動作ということですかね? 念のため確認ですが、WSL2環境下でChromeはちゃと起動してブラウザ画面が表示されますか? > ・webdriverのバージョンは、121.0.6167.85 (r1233107) > ※ webdriverは、"C:\chromedriver-win64\chromedriver.exe"に格納しています。 これは使われないので関係ないです。そもそもLinux用じゃなくてWindows用ですので、初っぱなから関係ないです。 また、chromedriverはSelenimが自動的に取得するので自分で手動でダウンロードする必要は無いです。
meg_

2024/02/04 04:54

@otnさん > また、chromedriverはSelenimが自動的に取得するので自分で手動でダウンロードする必要は無いです。 最近のSeleniumはそんな仕様になっているんですね。知らなかったので情報ありがとうございます。
otn

2024/02/04 08:48

Selenium4.6以降なので、ググルと2022/11からですね。
ppap

2024/02/06 14:36

@hiroki-o さん 問題の解決にご協力いただき、ありがとうございます。 > 別端末では、WSLのUbuntuからWindowsのwebdriverとChromeを起動したということでしょうか? そのように認識していましたが、otnさんからいただいたコメントで認識が誤っていたことが分かりました。
ppap

2024/02/06 14:40

@otn さん 問題の解決のためにご助力いただき、ありがとうございます。 > WSL2環境下での動作ということですかね? おっしゃる通りです。 > WSL2環境下でChromeはちゃと起動してブラウザ画面が表示されますか? こちらのサイト(https://astherier.com/blog/2020/08/install-google-chrome-on-wsl2/)のように、WSL2+Ubuntu 20.04にChromeをインストールして開けるか?という意味でしょうか? 現状として、ソースコードにある"driver = webdriver.Chrome()"では、Chromeが起動せずブラウザ画面が表示されません。
guest

回答1

0

ubuntu側にChromeをインストールしてなかったと言うことのようなので、回答に書きます。

Ubuntu 20.04にChromeをインストールして開けるか?という意味でしょうか?

そうです。そのページにある、

起動する際は、google-chromeを実行します。

で、起動してブラウザ画面が見えるかどうかです。
Linux上で「Chromeを使うSelenium」を動かそうとしているわけなので、Linux上でChromeが動くことが前提です。

やったことは無いですが、すでに起動しているChromeに対して、IPアドレスとポート番号を指定して、Chromedriverから接続することは可能なので、Linux側Chromedriverから「Windows側ですでに起動したChrome」に接続して制御するのも可能かも知れません。
トライするなら「起動済み chrome selenium」とかでググってみてください。同一OS内の事例くらいしか見当たらないと思いますが、IPアドレスが指定できるので、ファイアーウォール的な問題がなければ通信は出来そうな気がします。
また、今のSeleniumは、「Chromeのバージョンを見て、それと同じバージョンのchromedriverを自動的にダウンロードしてそれを実行する」という機能ですが、別OSのChromeなのでそこがうまく行かないと思うので、あらかじめ同じバージョンのchromedriver(もちろんLinux用)を用意して、それを使うような指定をしないといけないかと思います。(先に通信してChromeのバージョンを確認してからchromedriverを選択してダウンロードするという機能ならOKですが、そのあたり不明)
さらに言うと、Seleniumが使っているChrome機能にWindowsとLinuxで差が無いのかどうかとか全く知りませんので、通信できても動作に全く影響ないのかどうかは分かりません。直感的には大丈夫そうな気がしますが。

横道にそれましたが、話を元に戻して回答すると、
案1:ubuntuにChromeをインストールする
案2:ubuntuは使わず、全部Windows側でやる
のどちらかでしょうか。

投稿2024/02/06 15:46

otn

総合スコア86281

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問