在AWS EC2实例中运行Selenium(Firefox)时遭遇SessionNotCreatedException错误
在AWS EC2实例中运行Selenium(Firefox)时遭遇SessionNotCreatedException错误
看起来你遇到的是Selenium会话创建失败的问题,结合你的报错信息、版本信息和代码,我来帮你一步步排查解决:
一、先修正代码里的低级错误(最关键!)
我注意到你的代码里犯了一个很容易忽略的小错误:你导入的是Chrome专属的Options类,却拿它来初始化Firefox驱动,这会直接导致Selenium无法识别匹配的浏览器能力,触发SessionNotCreatedException。
错误的导入代码:
from selenium.webdriver.chrome.options import Options
修正为Firefox专用的Options:
from selenium.webdriver.firefox.options import Options
二、解决版本兼容性问题
你的版本组合存在严重的不匹配,这是核心问题之一:
- Firefox 142.0是非常新的版本
- geckodriver 0.36.0发布于2024年5月,仅支持Firefox 120~126版本,完全无法兼容Firefox 142.0
- Selenium 4.35.0本身是支持最新Firefox的,但需要搭配对应的geckodriver版本
解决步骤:
在EC2实例上升级geckodriver到最新稳定版
先移除旧版本,再下载对应x64架构的最新版本:# 移除旧的geckodriver sudo rm /usr/local/bin/geckodriver # 下载最新版(示例为2024年10月的稳定版0.39.0,可根据实际情况替换版本号) wget https://github.com/mozilla/geckodriver/releases/download/v0.39.0/geckodriver-v0.39.0-linux64.tar.gz # 解压文件 tar -xvzf geckodriver-v0.39.0-linux64.tar.gz # 移动到系统可执行路径并赋予权限 sudo mv geckodriver /usr/local/bin/ sudo chmod +x /usr/local/bin/geckodriver验证版本匹配
运行以下命令确认版本对应:firefox --version geckodriver --version通常最新版geckodriver会支持当前最新的5个Firefox版本,确保两者版本差距在合理范围内。
三、优化Firefox无头模式配置
在EC2这类无图形界面的服务器上,需要正确配置无头模式。Firefox 115+之后推荐使用新的无头参数,避免旧参数导致的兼容性问题:
options.add_argument("--headless=new") # 可额外添加资源优化参数 options.add_argument("--disable-gpu") options.add_argument("--window-size=1920x1080")
四、确保EC2环境具备Firefox依赖库
Ubuntu实例默认可能缺少Firefox运行所需的依赖库,运行以下命令安装:
sudo apt update sudo apt install -y libdbus-glib-1-2 gtk3.0 libx11-xcb1 libxtst6
另外提一句:关于SSH断开提示
你看到的client_loop: send disconnect: Broken pipe是SSH连接超时断开的提示,和Selenium的错误无关,只要解决了会话创建问题,程序正常运行后这个提示就不会影响使用了。
修正后的完整代码示例
import pandas as pd from selenium.webdriver.firefox.service import Service from selenium import webdriver # 导入Firefox专属Options from selenium.webdriver.firefox.options import Options from selenium.webdriver.common.by import By import requests from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC service = Service(executable_path="/usr/local/bin/geckodriver") options = Options() options.add_argument("--no-sandbox") # 使用新的无头模式参数 options.add_argument("--headless=new") options.add_argument("--disable-gpu") options.add_argument("--window-size=1920x1080") driver = webdriver.Firefox(service=service, options=options)
内容来源于stack exchange
相关产品推荐
相关产品推荐

