求助:Selenium+Python启动Firefox遇connection refused错误
解决Selenium连接Firefox时的connection refused错误
问题总结
你运行以下Selenium代码时:
from selenium import webdriver browser = webdriver.Firefox() browser.get('http://seleniumhq.org/')
Firefox浏览器能正常打开,但无法访问指定链接,同时抛出selenium.common.exceptions.WebDriverException: Message: connection refused错误。从geckodriver日志可以看到,Marionette服务已经在2828端口启动监听,但Selenium依然无法建立连接。你附上的截图也显示浏览器已打开但无法加载目标页面,这和报错信息指向的连接问题一致。
你的环境配置如下:
- 最新版Selenium
- 最新版Firefox浏览器
- Python 2.7.14
- 操作系统:Kali Linux 2.0
解决方案
下面是几个经过验证的修复步骤,建议按优先级尝试:
1. 匹配geckodriver与Firefox版本
你的geckodriver版本是0.20.1,这个版本仅兼容Firefox 57~60版本区间,但你使用的是最新版Firefox,版本不匹配是这类问题最常见的诱因。
- 下载与你当前Firefox版本对应的geckodriver(可查看geckodriver的版本说明文档确认兼容范围)
- 替换现有geckodriver文件,并给它添加可执行权限:
chmod +x /path/to/your/geckodriver - 在代码中明确指定geckodriver的路径:
from selenium import webdriver browser = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver') # 替换为你的实际路径 browser.get('http://seleniumhq.org/')
2. 修复Python2.7与Selenium的兼容性
最新版Selenium(4.x及以上)已经完全放弃了对Python2.7的支持,如果你安装的是这类高版本Selenium,必然会出现兼容性问题。
- 降级到最后一个支持Python2.7的稳定版Selenium:
pip uninstall selenium pip install selenium==3.141.0
3. 强制指定Marionette端口并检查Firefox配置
有时候自动分配端口会出现冲突,或者Firefox的Marionette服务未正确启用:
- 打开Firefox浏览器,在地址栏输入
about:config,搜索marionette.enabled,确保该选项的值为true(如果不是,双击修改即可) - 修改代码,强制指定Marionette的监听端口:
from selenium import webdriver from selenium.webdriver.firefox.options import Options opts = Options() opts.add_argument('--marionette-port=2828') browser = webdriver.Firefox(firefox_options=opts, executable_path='/path/to/geckodriver') browser.get('http://seleniumhq.org/')
4. 检查系统权限问题
Kali Linux的安全配置可能导致权限不足,影响geckodriver的正常运行:
- 确保geckodriver拥有可执行权限:
chmod +x /path/to/geckodriver - 检查/tmp目录的权限(geckodriver会在这里创建临时浏览器配置文件):
ls -ld /tmp # 如果权限不是drwxrwxrwx,执行以下命令修改: sudo chmod 777 /tmp
验证步骤
完成上述步骤后,先关闭所有Firefox进程,再重新运行代码。如果问题依然存在,可以:
- 用
geckodriver --version和firefox --version命令确认两者的版本号,确保兼容 - 尝试在终端直接运行
geckodriver,观察是否有异常输出
内容的提问来源于stack exchange,提问作者tanzid
相关产品推荐
相关产品推荐

