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

