如何使用Selenium结合VBA设置Chrome默认上传目录
Selenium + Chrome 设置文件上传默认路径问题说明
upload.default_directory 不是Chrome支持的合法偏好配置项,所以你参照下载路径写法加的这行配置不会生效:
driver.SetPreference "upload.default_directory", "c:\temp"
Chrome 仅对自身接管的下载流程开放了download.default_directory配置项,而文件上传触发的是Windows系统原生的文件资源管理器弹窗,这个弹窗的初始路径逻辑没有开放对应的浏览器配置入口,默认无历史上传记录时就会打开c:\users\[你的用户名]路径,无法直接通过Chrome首选项修改默认打开位置。
可行实现方案
方案1:绕开系统弹窗直接传值(最稳定,推荐)
这是Selenium官方推荐的文件上传实现方式,完全不需要处理系统弹窗:直接定位页面中type为file的上传input元素,调用SendKeys传入目标文件的完整绝对路径即可,全程不会弹出文件选择窗口。
VBA环境(Selenium Basic)示例代码:
' 定位页面上的文件上传控件,控件为隐藏状态时也可正常操作,无需额外处理显示属性 Dim uploadElement As WebElement Set uploadElement = driver.FindElement(By.CssSelector("input[type='file']")) ' 传入目标文件的完整路径,直接完成文件选择 uploadElement.SendKeys "c:\temp\你需要上传的文件.后缀名" ' 后续直接点击页面的上传确认按钮即可提交
如果需要上传多个文件,多个文件的完整路径用换行符分隔传入即可。
方案2:必须操作弹出的文件选择窗口时的处理
如果业务逻辑必须触发系统弹窗,不需要修改弹窗默认路径,在弹窗弹出后直接向文件名输入框发送目标文件的完整绝对路径,按回车确认即可直接选中对应文件,不需要手动切换目录。
VBA环境示例:
' 点击页面上触发文件选择的按钮 driver.FindElement(By.Id("触发上传的按钮ID")).Click ' 等待1秒让系统弹窗加载完成 Application.Wait Now + TimeValue("0:00:01") ' 直接向弹窗的文件名输入框发送完整文件路径,按回车确认选择 SendKeys "c:\temp\你需要上传的文件.后缀名", True SendKeys "~", True
补充说明
系统文件选择弹窗的初始路径会自动记录你上一次成功上传文件时所在的目录,如果连续多次上传同目录下的文件,第二次及以后弹窗会自动打开上次使用的目录,不需要额外配置。
内容的提问来源于stack exchange,提问作者Jesper Martin Schumacher
相关产品推荐
相关产品推荐

