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

如何在Selenium Python中创建下载动态目录?解决创建报错问题

解决Selenium Chrome下载目录配置及GoogleUpdater目录创建错误问题

问题场景

在使用Selenium结合pytest编写自动化测试时,通过fixture动态创建带时间戳的下载目录并配置Chrome默认下载路径,但运行时出现Chrome无法创建C:\Program Files\Google\GoogleUpdater目录的错误,需确保下载目录正常创建并被Chrome识别。

原测试代码

import time
from os import getenv
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from dotenv import load_dotenv
from Login_actions import Login_activities
from Insights_actions import Insights_activities
from Locators import Locators
import pytest, os
from datetime import datetime


class Test_Insights():

    @pytest.fixture()
    def test_setup(self):
        # 创建下载目录
        new_dir = r"D:/Selenium/Insights/" + datetime.now().strftime('%Y-%m-%d_%H-%M-%S')
        print(new_dir)
        if not os.path.exists(new_dir):
            os.makedirs(new_dir)

        # 初始化Chrome浏览器实例
        options=Options()
        options.add_argument('--start-maximized')
        # options.add_argument('--headless')
        prefs={"download.default_directory" : new_dir}
        options.add_experimental_option("prefs", prefs)
        self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()),options=options)

        # 加载凭据
        load_dotenv()
        self.username = getenv("TOP_USERNAME")
        self.password = getenv("TOP_PWD")

        # 测试后清理
        yield
        self.driver.close()
        self.driver.quit()
        print("Test executed")

报错信息

[2220:21976:0915/144810.074:ERROR:util.cc(129)] Can't create base directory: C:\Program Files\Google\GoogleUpdater

解决方案

1. 规范下载目录创建逻辑

使用os.path.join拼接路径更可靠,同时提前确保父目录存在,避免子目录创建失败:

parent_dir = r"D:/Selenium/Insights/"
if not os.path.exists(parent_dir):
    os.makedirs(parent_dir)
new_dir = os.path.join(parent_dir, datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))

2. 完善Chrome下载偏好设置

添加更多下载相关配置,确保Chrome能正确识别并使用指定目录:

prefs = {
    "download.default_directory": new_dir,
    "download.prompt_for_download": False,  # 禁用下载提示
    "download.directory_upgrade": True,     # 允许目录升级
    "safebrowsing.enabled": True            # 启用安全浏览,避免下载拦截
}

3. 解决GoogleUpdater目录错误

该错误由Chrome自动更新组件触发,与下载目录配置无关,通过添加启动参数禁用组件更新即可规避:

options.add_argument('--disable-background-networking')
options.add_argument('--disable-component-update')

修改后的完整fixture代码

@pytest.fixture()
def test_setup(self):
    # 确保下载父目录存在
    parent_dir = r"D:/Selenium/Insights/"
    if not os.path.exists(parent_dir):
        os.makedirs(parent_dir)
    # 创建带时间戳的子目录
    new_dir = os.path.join(parent_dir, datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
    print(new_dir)
    if not os.path.exists(new_dir):
        os.makedirs(new_dir)

    # 配置Chrome选项
    options = Options()
    options.add_argument('--start-maximized')
    # 禁用Chrome自动更新组件,避免GoogleUpdater错误
    options.add_argument('--disable-background-networking')
    options.add_argument('--disable-component-update')
    # 配置下载偏好
    prefs = {
        "download.default_directory": new_dir,
        "download.prompt_for_download": False,
        "download.directory_upgrade": True,
        "safebrowsing.enabled": True
    }
    options.add_experimental_option("prefs", prefs)
    self.driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()), options=options)

    # 加载登录凭据
    load_dotenv()
    self.username = getenv("TOP_USERNAME")
    self.password = getenv("TOP_PWD")

    # 测试结束后清理
    yield
    self.driver.close()
    self.driver.quit()
    print("Test executed")

说明

  • 下载目录问题:核心是确保路径权限正常,同时通过完善Chrome偏好配置让浏览器正确识别自定义下载路径。
  • GoogleUpdater错误:属于Chrome自身更新服务的权限问题,禁用组件更新即可消除该报错,不影响测试执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:15:31