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

Chrome 111在Debian 11中download.default_directory设置失效问题咨询

Debian 11下Chrome无头模式Selenium下载目录失效问题排查

问题背景

Debian 11系统使用Chrome 111 + Python Selenium无头浏览器下载文件,此前运行正常,无服务器修改、更新或重启操作的情况下,所有脚本突然将文件下载至脚本执行目录,而非代码中设置的download.default_directory。已确认download_directory目录创建正常、权限无问题,sudo/普通用户/cron运行结果一致,重装Chrome和ChromeDriver无效,相同代码在Windows环境运行正常。

原实例化代码

import os
import uuid
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from webdriver_manager.chrome import ChromeDriverManager

def create_temp_folder():
    temp_folder = new_file_folder + directory_separator + str(uuid.uuid4())
    os.mkdir(temp_folder)
    return temp_folder

def init_chrome_service(temp_directory = False):
    #init stage, notes for later class construction
    service = Service(executable_path=ChromeDriverManager().install())
    chrome_options = Options()
    if temp_directory:
        download_directory = create_temp_folder()

    chrome_options.add_argument("--disable-web-security")
    chrome_options.add_argument("--disable-extensions")
    chrome_options.add_argument("--no-sandbox")
    chrome_options.add_argument("--headless")

    prefs = {'download.default_directory' : download_directory} 
    chrome_options.add_experimental_option("detach", True)
    chrome_options.add_experimental_option('prefs', prefs)
    driver = webdriver.Chrome(options=chrome_options) 
    return driver, download_directory

排查与修复建议

  • 补充下载相关偏好设置:Linux下Chrome无头模式需要明确禁用下载弹窗、开启目录升级,避免默认配置覆盖。修改prefs字典:
    prefs = {
        'download.default_directory': download_directory,
        'download.prompt_for_download': False,
        'download.directory_upgrade': True,
        'safebrowsing.enabled': True
    }
    
  • 确保使用绝对路径:修改create_temp_folder返回绝对路径,避免相对路径解析错误:
    def create_temp_folder():
        temp_folder = os.path.join(new_file_folder, str(uuid.uuid4()))
        os.mkdir(temp_folder)
        return os.path.abspath(temp_folder)
    
  • 添加Linux无头模式必要参数:新增--disable-dev-shm-usage解决共享内存限制,同时尝试切换无头模式版本(Chrome 111的新版无头可能存在兼容性问题):
    chrome_options.add_argument("--disable-dev-shm-usage")
    # 尝试使用旧版无头模式
    chrome_options.add_argument("--headless=chrome")
    # 或新版无头模式
    # chrome_options.add_argument("--headless=new")
    
  • 隔离Chrome用户配置:创建临时用户数据目录,避免系统默认配置干扰:
    temp_user_dir = os.path.join(new_file_folder, "temp_chrome_user")
    os.makedirs(temp_user_dir, exist_ok=True)
    chrome_options.add_argument(f"--user-data-dir={temp_user_dir}")
    
  • 检查cron环境变量:若通过cron运行,需在脚本开头设置完整环境变量,或使用绝对路径调用ChromeDriver,避免路径解析错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:50:24