使用Selenium+Java上传文件遇CDP版本不匹配及代码疑问
问题分析与解决
一、关于CDP版本警告的说明
你看到的CDP版本不匹配信息是警告而非错误,不会直接导致文件上传失败。原因是你的浏览器版本为105,但当前使用的Selenium版本仅支持到CDP 104,Selenium自动匹配了最接近的版本实现。若要消除该警告,将Selenium升级到与浏览器版本(105)兼容的版本即可。
二、你的上传代码存在的问题
错误操作系统弹窗
Windows文件上传弹窗是系统级控件,Selenium无法直接操作或切换到该弹窗。你当前的代码逻辑是点击按钮调出系统弹窗后,尝试给活跃元素发送文件路径,这种方式大概率失效——因为活跃元素此时并非文件输入框,且Selenium无法控制系统弹窗。正确的文件上传方式
跳过点击按钮调出弹窗的步骤,直接找到页面上的<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");
- Thread.sleep()的弊端
大量使用固定时长的Thread.sleep()会导致代码稳定性差,建议替换为Selenium的显式等待WebDriverWait,等待元素可点击/可见后再操作,示例:
WebDriverWait wait = new WebDriverWait(driver, 10); wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id=\"div-add-file\"]/a"))).click();
- 多语言页面的元素定位问题
注释里的按钮用了文本定位text()='Subir nuevo archivo',若页面切换语言,该定位会直接失效。建议优先使用ID、CSS选择器等不依赖文本的定位方式,保证多语言环境下的兼容性。
总结
CDP警告不影响功能,升级Selenium可消除;文件上传代码的核心问题是错误尝试操作系统弹窗,正确做法是直接给页面的文件输入框元素发送文件路径。
内容的提问来源于stack exchange,提问作者JustToKnow
相关产品推荐
相关产品推荐

