Go语言用Selenium上传文件报错:文件未找到,求解决方案
解决Go Selenium文件上传"File not found"错误
针对你遇到的问题,核心原因是远程Selenium服务器无法直接访问本地文件,Go的Selenium库其实支持本地文件检测功能,只是需要手动配置,以下是具体解决步骤:
1. 配置LocalFileDetector
初始化RemoteWebDriver后,必须启用本地文件检测器,Selenium会自动将本地文件上传到远程服务器:
caps := selenium.Capabilities{"browserName": "chrome"} driver, err := selenium.NewRemote(caps, "http://localhost:4444/wd/hub") if err != nil { log.Fatal(err) } defer driver.Quit() // 关键步骤:启用本地文件检测器 driver.SetFileDetector(selenium.LocalFileDetector{})
2. 使用文件绝对路径
远程服务器的工作目录和本地不一致,相对路径会导致文件找不到,建议先将路径转换为绝对路径:
import "path/filepath" // ... 你的元素查找代码 ... absPath, err := filepath.Abs(path) if err != nil { return fmt.Errorf("无法获取文件绝对路径: %w", err) } if err = element.SendKeys(absPath); err != nil { return fmt.Errorf(errors.Selenium.SendKeysFailure+"\n%w", err) }
3. 检查库版本
确保使用最新版的github.com/tebeka/selenium库,旧版本可能没有SetFileDetector方法,执行更新命令:
go get -u github.com/tebeka/selenium
额外验证点
- 提前检查本地文件是否存在,避免无效路径:
if _, err := os.Stat(absPath); os.IsNotExist(err) { return fmt.Errorf("本地文件不存在: %s", absPath) } - 确认file类型input元素定位准确,没有定位到其他无关元素。
内容的提问来源于stack exchange,提问作者Pedro Miguel C. Silva
相关产品推荐
相关产品推荐

