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

使用Selenium+Java上传文件遇CDP版本不匹配及代码疑问

问题分析与解决

一、关于CDP版本警告的说明

你看到的CDP版本不匹配信息是警告而非错误,不会直接导致文件上传失败。原因是你的浏览器版本为105,但当前使用的Selenium版本仅支持到CDP 104,Selenium自动匹配了最接近的版本实现。若要消除该警告,将Selenium升级到与浏览器版本(105)兼容的版本即可。

二、你的上传代码存在的问题

  1. 错误操作系统弹窗
    Windows文件上传弹窗是系统级控件,Selenium无法直接操作或切换到该弹窗。你当前的代码逻辑是点击按钮调出系统弹窗后,尝试给活跃元素发送文件路径,这种方式大概率失效——因为活跃元素此时并非文件输入框,且Selenium无法控制系统弹窗。

  2. 正确的文件上传方式
    跳过点击按钮调出弹窗的步骤,直接找到页面上的<input type="file">元素(通常默认隐藏),直接调用sendKeys()传入文件路径即可。比如你代码里先用JS修改了某个元素的display样式,该元素很可能就是隐藏的文件输入框,直接对它执行sendKeys即可:

((JavascriptExecutor) driver).executeScript("arguments[0].setAttribute('style','display:block;')", ele);
// ele应为<input type="file">元素,直接传入文件路径
ele.sendKeys("C:\\Users\\steve\\Downloads\\01004185FCA003900517097.pdf");
  1. Thread.sleep()的弊端
    大量使用固定时长的Thread.sleep()会导致代码稳定性差,建议替换为Selenium的显式等待WebDriverWait,等待元素可点击/可见后再操作,示例:
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"div-add-file\"]/a"))).click();
  1. 多语言页面的元素定位问题
    注释里的按钮用了文本定位text()='Subir nuevo archivo',若页面切换语言,该定位会直接失效。建议优先使用ID、CSS选择器等不依赖文本的定位方式,保证多语言环境下的兼容性。

总结

CDP警告不影响功能,升级Selenium可消除;文件上传代码的核心问题是错误尝试操作系统弹窗,正确做法是直接给页面的文件输入框元素发送文件路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:10:35