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
相关产品推荐
相关产品推荐

