我在 python 上通过 Selenium 加载 Firefox 浏览器时遇到问题。
正在执行的代码如下。
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
service = FirefoxService(executable_path="./geckodriver",)
browser = webdriver.Firefox(service=service)
browser.get('http://selenium.dev/')
环境如下:
执行命令时的错误堆栈如下:
Traceback (most recent call last):
File "/home/userhere/source_code/scraper/selenium_main.py", line 7, in <module>
browser = webdriver.Firefox(service=service)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/firefox/webdriver.py", line 197, in __init__
super().__init__(command_executor=executor, options=options, keep_alive=True)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 288, in __init__
self.start_session(capabilities, browser_profile)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 381, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 444, in execute
self.error_handler.check_response(response)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 249, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 127
查看
geckodriver.log
,记录以下内容。
1670579048409 mozrunner::runner INFO Running command: "/snap/firefox/current/firefox.launcher" "--marionette" "--remote-debugging-port" "39445" "--remote-allow-hosts" "localhost" "-no-remote" "-profile" "/tmp/rust_mozprofilerrtoxk"
/snap/firefox/current/firefox.launcher: 46: exec: /snap/pycharm-community/310/usr/lib/firefox/firefox: not found
我能够本机运行 Firefox,确保
geckodriver
可执行并通过终端运行运行 geckodriver
,并等待通过提供的端口发出的请求。
我尝试了不同版本的
geckodriver
并更新了firefox。
我还尝试使用 webdriver-manager 来设置环境[代码如下]。
from selenium import webdriver
from selenium.webdriver.firefox.service import Service as FirefoxService
from webdriver_manager.firefox import GeckoDriverManager
service = FirefoxService(executable_path=GeckoDriverManager().install())
driver = webdriver.Firefox(service=service)
执行代码会产生以下错误跟踪。
[WDM] - Downloading: 19.0kB [00:00, 10.5MB/s]
Traceback (most recent call last):
File "/home/userhere/source_code/scraper/selenium_main.py", line 8, in <module>
driver = webdriver.Firefox(service=service)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/firefox/webdriver.py", line 197, in __init__
super().__init__(command_executor=executor, options=options, keep_alive=True)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 288, in __init__
self.start_session(capabilities, browser_profile)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 381, in start_session
response = self.execute(Command.NEW_SESSION, parameters)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py", line 444, in execute
self.error_handler.check_response(response)
File "/home/userhere/source_code/scraper/.venv/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py", line 249, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Process unexpectedly closed with status 127
不完全确定,但这可能是由于您的 Firefox 浏览器版本与 Geckodriver Webdriver 版本不兼容造成的。
我还无法证明这一点,但也许您可以尝试以与 Chrome 类似的方式获取 Firefox 的驱动程序安装程序。不要使用 ChromeService().install(),请考虑对 Firefox 使用 FirefoxService()。