You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows环境下Selenium webdriver.Firefox()运行异常问询

问题描述

使用Selenium编写网络图片爬虫时,相同代码在Linux环境运行无异常,在Windows系统中运行到driver.get()调用时程序直接退出:driver.get调用前的所有打印语句均可正常输出,位于driver.get之后的print("test")语句始终无法执行。

复现代码如下:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.firefox.service import Service
from webdriver_manager.firefox import GeckoDriverManager
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
import os
import requests
import base64


def webscrape(query, max_count, q):
    options = Options()
    options.add_argument('-headless')
    # Add a GH_token to the environment so there are no limitations on the number of requests.
    os.environ['GH_TOKEN'] = "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"
    gecko = GeckoDriverManager().install()
    driver = webdriver.Firefox(service=Service(gecko), options=options)
    
    driver.get("https://www.google.com/search?q=" + query + "&tbm=isch")
print("test")

代码已配置Firefox无头运行模式,通过GeckoDriverManager自动安装匹配版本的GeckoDriver,初始化webdriver实例后访问谷歌图片搜索地址时程序异常终止,无后续执行逻辑。

问题原因
  • Windows环境下Firefox无头模式缺少兼容启动参数:部分版本GeckoDriver在Windows无头环境运行时,未配置沙箱禁用、共享内存相关参数时,会因系统权限校验、内存映射冲突直接崩溃,且不会抛出Python层可见异常,直接终止进程。
  • GeckoDriver加载异常:webdriver_manager在Windows下默认将驱动下载到系统临时目录,若目录权限不足、驱动文件被系统安全软件拦截,会导致驱动加载过程中进程静默退出。
  • 代码缩进错误:当前代码中print("test")与webscrape函数定义同级,不属于函数内部driver.get()之后的执行逻辑,本身不会在页面访问完成后触发。
  • 网络连通性适配问题:Windows与Linux网络栈存在差异,若访问谷歌域名存在网络连通性问题、未正确配置代理,部分版本GeckoDriver不会返回超时错误,会直接触发进程崩溃。
解决方案
  1. 补全Windows环境下Firefox无头模式的兼容启动参数,初始化Options时添加如下配置,同时手动指定Firefox安装路径避免自动识别失败:
options = Options()
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 = r'C:\Program Files\Mozilla Firefox\firefox.exe'
  1. 指定GeckoDriver的固定存储路径,避免临时目录权限、安全软件拦截问题:
# 提前在代码目录下创建drivers文件夹用于存储驱动
driver_save_path = os.path.join(os.getcwd(), "drivers")
gecko = GeckoDriverManager(path=driver_save_path).install()
  1. 添加页面加载超时配置与异常捕获,避免进程静默无提示退出,同时修正代码缩进问题,把后续执行逻辑放到函数内部:
# 设置30秒页面加载超时
driver.set_page_load_timeout(30)
try:
    driver.get("https://www.google.com/search?q=" + query + "&tbm=isch")
    print("test")
except Exception as e:
    print(f"页面加载异常:{str(e)}")
finally:
    # 逻辑执行完成后主动释放驱动资源
    driver.quit()
  1. 若本地访问谷歌需要代理,在启动参数中添加和本机一致的代理配置:
# 替换为自己本机的代理服务地址与端口
options.add_argument('--proxy-server=http://127.0.0.1:7890')

内容的提问来源于stack exchange,提问作者BasJansw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 21:57:21