Debian10部署Selenium+Firefox爬虫出现浏览器提前退出错误如何解决
问题根因
你遇到的两个报错本质是版本适配、参数配置的双重问题:
- 设置
marionette=False是完全错误的配置,geckodriver 0.27+仅支持通过marionette协议控制Firefox,关闭后驱动无法和浏览器通信,才会触发浏览器提前退出的报错 - 第一次出现「无法匹配能力集」报错,大概率是Debian服务器无图形环境缺少依赖,或者Firefox启动参数不全导致的
具体解决步骤
1. 还原错误配置
不要手动修改marionette参数,也不需要额外声明DesiredCapabilities,selenium 3.141.0会自动适配geckodriver需要的能力集。
2. 补充无头模式必要启动参数
无图形环境的服务器运行Firefox,需要加额外参数规避权限、图形依赖问题:
options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu")
3. 确认权限和依赖完整
- 给geckodriver加可执行权限:运行
sudo chmod +x /usr/local/bin/geckodriver - 安装Firefox ESR缺失的依赖:运行
sudo apt install libgtk-3-0 libx11-xcb1 libdbus-glib-1-2 xvfb -y
4. 运行修正后的代码
#!/usr/bin/python3 from selenium import webdriver import requests from selenium.webdriver.firefox.options import Options as FirefoxOptions token="" # 填写你的Telegram Bot token chat="" # 填写接收通知的chat id message="Available" options = FirefoxOptions() options.add_argument("--headless") # 新增服务器环境必备参数 options.add_argument("--no-sandbox") options.add_argument("--disable-dev-shm-usage") options.add_argument("--disable-gpu") # 指定Firefox二进制路径 options.binary_location = "/usr/bin/firefox" browser = webdriver.Firefox(options=options, executable_path="/usr/local/bin/geckodriver") browser.get("https://www.adidas.ch/de/ajax-3-jsy/GT9559.html") if ("Dieses Produkt ist leider ausverkauft." not in browser.page_source): send_text = 'https://api.telegram.org/bot' + token + '/sendMessage?chat_id=' + chat + '&parse_mode=Markdown&text=' + message response = requests.get(send_text) print(response.json()) else: print("Out of stock") browser.quit()
额外排查方案
如果仍然报错,可以在初始化驱动时添加日志参数,输出详细信息定位问题:
browser = webdriver.Firefox(options=options, executable_path="/usr/local/bin/geckodriver", service_log_path="./gecko.log")
运行后查看生成的gecko.log即可拿到具体错误信息。
内容的提问来源于stack exchange,提问作者Jocomol
相关产品推荐
相关产品推荐

