実現したいこと
seleniumを使用してchromeを表示させたい
前提
皆様、いつもお世話になっております。
seleniumの練習の為、chromeを表示させたいのですが以下のエラーが表示されどうしても
うまくいきません。ネットで調べた情報を色々試したりもしましたが、ダメでした。
どこが悪いのかアドバイス頂けたら幸いです。Python初心者になります。
発生している問題・エラーメッセージ
[root@localhost TEST]# python3 sample2.py [WDM] - ====== WebDriver manager ====== [WDM] - Current google-chrome version is 109.0.5414 [WDM] - Get LATEST chromedriver version for 109.0.5414 google-chrome [WDM] - Driver [/root/.wdm/drivers/chromedriver/linux64/109.0.5414.74/chromedriver] found in cache Traceback (most recent call last): File "sample2.py", line 8, in <module> driver = webdriver.Chrome(ChromeDriverManager().install()) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/chrome/webdriver.py", line 81, in __init__ desired_capabilities=desired_capabilities) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 157, in __init__ self.start_session(capabilities, browser_profile) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 252, in start_session response = self.execute(Command.NEW_SESSION, parameters) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/webdriver.py", line 321, in execute self.error_handler.check_response(response) File "/usr/local/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py", line 242, in check_response raise exception_class(message, screen, stacktrace) selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally. (unknown error: DevToolsActivePort file doesn't exist) (The process started from chrome location /usr/bin/google-chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.)
該当のソースコード
Python
1from selenium import webdriver 2from webdriver_manager.chrome import ChromeDriverManager 3from selenium.webdriver.chrome.options import Options 4options = Options() 5 6options.add_argument('--headless') 7options.add_argument("--no-sandbox") 8driver = webdriver.Chrome(ChromeDriverManager().install()) 9driver.get('https://google.co.jp/') 10driver.quit()
試したこと
・option追加
options.add_argument('--headless')
options.add_argument("--no-sandbox")
・webdriver-managerのインストール
補足情報(FW/ツールのバージョンなど)
・Centos7
・Python3.6.8
・Google Chrome 109.0.5414.119
・ChromeDriver 109.0.5414.74
・webdriver-manager 3.7.1
・chromedriver-binary 109.0.5414.74.0
・selenium 3.141.0
https://pypi.org/project/webdriver-manager/
の「Use with Chrome」を見ると、「selenium 4」の場合はコードの書き方を変えないといけないようです
#driver = webdriver.Chrome(ChromeDriverManager().install())
from selenium.webdriver.chrome.service import Service as ChromeService
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
で、どうでしょうか?
jbpb0さん
コメントありがとうございます。すいませんseleniumのVer書いてませんでした。3.141.0です。実行すると以下のエラーになります。
[root@localhost TEST]# python3 sample2.py
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 109.0.5414
[WDM] - Get LATEST chromedriver version for 109.0.5414 google-chrome
[WDM] - Driver [/root/.wdm/drivers/chromedriver/linux64/109.0.5414.74/chromedriver] found in cache
Traceback (most recent call last):
File "sample2.py", line 11, in <module>
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
TypeError: __init__() got an unexpected keyword argument 'service'
selenium4にするにはPythonのVerも3.7にしないといけないみたいです。あげてやってみるのも一つの手でしょうか。
提示されているコードでは、option が指定されていません。
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
とすれば、どうでしょうか?
もし、"unknown error: DevToolsActivePort file doesn't exist" というエラーが出たら、次の行を追加してデバッグポートを指定してください。
options.add_argument("--remote-debugging-port=9222")
Demeraraさん
コメントありがとうございます。
unknownが出た為、デバッグポート追加しました。その上で実行すると
[root@localhost TEST]# python sample3.py
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 109.0.5414
[WDM] - Get LATEST chromedriver version for 109.0.5414 google-chrome
[WDM] - Driver [/root/.wdm/drivers/chromedriver/linux64/109.0.5414.74/chromedriver] found in cache
になりました。
エラーは出なくなったが想定通りの挙動ではないということでしょうか?
ヘッドレスにしてるので何も表示されないのは正常ですが、どのような挙動を想定されていますか?
ブラウザウィンドウを表示させたいのでした。失礼しました。
となると、ヘッドレスとサンドボックス無効化のオプションを削除して、
options.add_argument('--disable-dev-shm-usage')
というオプションを追加してください。
Demeraraさん
返信ありがとうございます。教えていただいたものを追加して実行してみました。
from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
options = Options()
#options.add_argument('--headless')
#options.add_argument("--no-sandbox")
options.add_argument("--remote-debugging-port=9222")
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
driver.get('https://google.co.jp/')
driver.quit()
seleniumを初めて使用するのでわからないのですが、実行後にこの場合chromeが新規に立ち上がる挙動と考えていいんでしょうか?chromeが起動してこないです。
> chromeが起動してこないです。
> python3 sample2.py
のように実行するのではなく、ターミナルでpythonを対話モードで起動して、そこにコードを一行ずつ入力してみてください
当方のmacでは、下記のようになります
> driver = webdriver.Chrome(ChromeDriverManager().install(), options=options)
で、chromeが起動します
> driver.get('https://google.co.jp/')
で、chromeに「https://google.co.jp/」が表示されます
> driver.quit()
で、chromeが終了します
> python3 sample2.py
のように実行すると、ちょっとの間(1秒くらい?)だけchromeが起動して、終了します
一応「https://google.co.jp/」が表示されるのは見えます
【追記】
コードの最後の「driver.quit()」を削除して
> python3 sample2.py
のように実行した場合は、chromeは終了せず、「https://google.co.jp/」が表示された状態のまま残ります
この質問の内容とは直接は関係無いかもしれませんが、
> ・ChromeDriver 109.0.5414.74
・webdriver-manager 3.7.1
・chromedriver-binary 109.0.5414.74.0
は、全部同じ役割をするものですよね
複数入れてると変なことが起きるかもしれないので、一つだけにした方がいいかも
「webdriver-manager」は、chromeのバージョンに合う「chromedriver」を自動的に入れてくれるものなので、それを使うのが便利です
他のは、chromeが勝手にバージョンアップされたら、その都度chromeのバージョンに合う「chromedriver」を手動でインストールしないといけないので、メンドくさい
jbpb0さん
何度もありがとうございます。一行ずつやってみたのですが、chromeは起動しませんでした。pyファイルで実行すると以下の結果になり、Demeraraさんのアドバイスのおかげでエラーは出なくなりましたがchromeが開きません。使用しているPCはWindowsです。
[root@localhost TEST]# python sample3.py
[WDM] - ====== WebDriver manager ======
[WDM] - Current google-chrome version is 109.0.5414
[WDM] - Get LATEST chromedriver version for 109.0.5414 google-chrome
[WDM] - Driver [/root/.wdm/drivers/chromedriver/linux64/109.0.5414.74/chromedriver] found in cache
それと別途作成していたchrome画面のスクリーンショットを取得するpyファイルの方は、うまくいきました。色々とアドバイスありがとうございます。引き続き調べてみます。
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
browser = webdriver.Chrome(options=options)
browser.implicitly_wait(10)
url = "https://google.com"
browser.get(url)
browser.save_screenshot('google.png')
browser.quit()
> 使用しているPCはWindowsです。
あれ?
> Centos7
ではないのですか?
質問のエラーメッセージに「/usr/local/lib/python3.6/...」とかありますが
ああ、ごめんなさい。WindowsのvscodeからCentosにリモート接続して使っているって意味です。
> WindowsのvscodeからCentosにリモート接続して使っている
その状態で、Centos側で(pythonを使わず)普通にchromeを起動したら、Windowsパソコンの画面のどこかにchromeは表示されるのでしょうか?
jbpb0さん
お返事遅くなってごめんなさい。おはようございます、いや表示しないです。そういう環境で使用して可能なのかもよくわからないです。ヘッドレスモードなら起動してますけど。
jbpb0さん
すいません。もう一度自分でよく調べて本当に実施したい事をまとめて再投稿させていただきます。
その時、ご縁がありましたらまたよろしくお願いします。
> 表示しない
Centos側で(pythonを使わず)普通にchromeを起動して、chromeがWindows側に表示されないのなら、Centos側でpythonからchromeを起動しても表示されないのは当然ですよね
> seleniumでchromeを表示させたいがうまく動作しない
リモートデスクトップとかvncとかのような、CentosのGUI画面がWindowsに表示される「Centosにリモート接続」方法を使えば、Centos側のchromeをWindows側に表示させることができます
回答2件
あなたの回答
tips
プレビュー