Selenium4启动Firefox报错geckodriver意外退出状态码1
问题根因
这个报错是版本不匹配直接导致的:
- Selenium 4.x系列启动驱动时会默认传入
--websocket-port参数,用来支撑CDP调试相关的新特性,但当前环境用的geckodriver 0.24.0版本太老,根本没有实现这个参数的支持,收到未知参数后直接退出,才会返回状态码1的异常。 - 代码里直接给
webdriver.Firefox()传executable_path的写法在Selenium 4中已经被弃用,所以会弹出对应的弃用警告。顺带一提,代码里用的find_element_by_id这类旧定位方法在Selenium 4中也已经被标记为弃用,后续大版本会直接移除,建议一起替换。
解决方法
按两步操作就能修复:
- 升级geckodriver:把
./webdrivers/路径下的旧版geckodriver替换成0.30.0及以上的新版本,这个版本开始才支持--websocket-port参数,能适配Selenium 4.1.0和Firefox 87。如果是Linux/macOS系统,替换完记得执行chmod +x ./webdrivers/geckodriver给文件加上可执行权限。 - 调整代码适配Selenium 4的新语法:用Service对象传入驱动路径,替换已经弃用的
executable_path直接传参方式;同时换成新的元素定位写法,避免后续版本报错。
修正后的参考代码:
from selenium import webdriver from selenium.webdriver.firefox.service import Service from selenium.webdriver.common.by import By geckodriver_path = "./webdrivers/geckodriver" service = Service(executable_path=geckodriver_path) driver = webdriver.Firefox(service=service) driver.get("https://dev.to") driver.find_element(By.ID, "nav-search").send_keys("Selenium")
改完重新运行就不会再报参数不识别的错误,弃用警告也会消失。
内容的提问来源于stack exchange,提问作者Vijay Sawant
相关产品推荐
相关产品推荐

