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

Chrome 106.0.5249.62版本下Selenium无头模式下载脚本失效问题排查

解决Chrome无头模式下Selenium无法下载文件的问题

让我帮你拆解下脚本里的问题,以及如何修复让无头模式下的文件下载正常工作:

1. 最明显的小错误:没有执行close方法

你代码里写的是driver.close而不是driver.close()——少了括号意味着你只是引用了这个方法,并没有真正调用它。不过这不是下载失败的核心原因,但必须修正,否则浏览器会话会一直残留。

2. 无头模式的核心配置缺失

Chrome无头模式默认不会自动处理下载,你必须手动配置下载目录并禁用下载提示弹窗。需要添加以下配置到你的Options里:

# 设置你的下载路径,Windows路径用原始字符串避免转义问题
download_path = r"C:\Your\Actual\Download\Folder"
prefs = {
    "download.default_directory": download_path,
    "download.prompt_for_download": False,  # 禁用下载提示
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True  # 避免安全拦截
}
options.add_experimental_option("prefs", prefs)

另外,针对无头模式,建议额外添加两个参数避免权限和资源问题:

options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")

3. 下载触发逻辑的问题

你连续两次调用driver.get("https://domain.tld/download"),可能页面还没完成第一次下载就触发了第二次,导致请求被中断。建议在每次触发下载后添加足够的等待时间,或者如果是通过按钮触发下载,最好用click()方法而不是直接get(如果页面有下载按钮的话)。

4. Selenium语法的兼容性问题

你用的find_element_by_name是Selenium 3的旧语法,如果你的Selenium版本是4.x,建议更新为新语法(需要导入By类):

from selenium.webdriver.common.by import By

# 替换旧写法
driver.find_element(By.NAME, "usernamefld").send_keys("xxxxx")

虽然这个不直接影响下载,但能避免后续版本兼容问题。

修正后的完整脚本

import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--disable-extensions")
options.add_argument("--disable-gpu")
options.add_argument("--headless")
options.add_argument("--disable-dev-shm-usage")
options.add_argument("--no-sandbox")

# 配置下载参数
download_path = r"C:\Your\Download\Directory"  # 替换成你的实际下载目录
prefs = {
    "download.default_directory": download_path,
    "download.prompt_for_download": False,
    "download.directory_upgrade": True,
    "safebrowsing.enabled": True
}
options.add_experimental_option("prefs", prefs)

# 初始化驱动(Selenium 4+用options参数,不再用chrome_options)
driver = webdriver.Chrome('C:/chromedriver/chromedriver.exe', options=options)
driver.get("https://domain.tld")
driver.implicitly_wait(20)

# 登录操作
driver.find_element(By.NAME, "usernamefld").send_keys("xxxxx")
time.sleep(0.2)
driver.find_element(By.NAME, "passwordfld").send_keys("xxxxx")
time.sleep(0.6)
driver.find_element(By.NAME, 'login').click()

# 等待登录跳转完成,避免直接访问下载页面时未登录
time.sleep(3)

# 第一次下载并等待完成
driver.get("https://domain.tld/download")
time.sleep(5)  # 根据文件大小调整等待时间

# 第二次下载并等待完成
driver.get("https://domain.tld/download")
time.sleep(5)

# 正确关闭浏览器会话
driver.close()
driver.quit()

额外注意事项

  • 确保你设置的下载目录已经存在,否则Chrome会默认下载到临时文件夹。
  • 如果下载的是大文件,建议用更智能的等待方式(比如监控下载目录中的文件是否完成),而不是固定的time.sleep。
  • 确认你的chromedriver版本和Chrome 106完全匹配,版本不兼容会导致各种异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 16:32:35