GeckoDriver+Firefox环境下send_keys上传文件报InvalidArgumentException求助
针对Firefox文件上传
InvalidArgumentException的解决方案 结合你给出的环境配置(GeckoDriver 0.20、Windows系统、Firefox 60/61 Nightly、Selenium 3.8.1),这个文件上传报错大概率是版本兼容性或者路径解析逻辑导致的,给你几个可行的排查和解决方向:
1. 优先排查GeckoDriver与Firefox的版本匹配
GeckoDriver和Firefox的版本对应关系非常严格:
- 官方文档显示GeckoDriver 0.20.x适配的是Firefox 57-60版本,而你使用的Nightly 61.0a1已经超出了这个适配范围,这很可能是问题的核心原因。
- 如果你要继续用Firefox 61 Nightly,建议升级GeckoDriver到0.21.0及以上版本(0.21开始正式适配Firefox 59+);如果保留Firefox 60,也可以尝试升级到GeckoDriver 0.20.1,修复一些小版本的兼容性bug。
2. 调整Windows文件路径的写法
虽然Chrome能正常识别C:/file.abc这种斜杠格式,但GeckoDriver在Windows环境下对路径的解析可能更严格,试试这两种更稳妥的写法:
- 使用双反斜杠转义:
"C:\\file.abc" - 使用Python原始字符串:
r"C:/file.abc"
修改后的代码示例:
site = "https://www.sendspace.com/" driver = webdriver.Firefox() driver.get(site) # 定位文件上传控件 upload_input = driver.find_element_by_css_selector("input[type='file']") # 用原始字符串传入文件路径 upload_input.send_keys(r"C:/file.abc")
3. 处理可能隐藏的上传控件
有些网站会用CSS把文件上传控件设为隐藏状态(比如display:none),Firefox对隐藏元素的send_keys支持不如Chrome友好,你可以先通过JS把控件设为可见再操作:
upload_input = driver.find_element_by_css_selector("input[type='file']") # 执行JS显示控件 driver.execute_script("arguments[0].style.display = 'block';", upload_input) upload_input.send_keys(r"C:/file.abc")
4. 快速验证文件本身的可用性
虽然Chrome能正常上传,但还是可以快速确认两点:
- 文件
C:/file.abc确实存在于你的C盘根目录 - 当前用户拥有该文件的读取权限(避免是系统保护目录下的文件)
内容的提问来源于stack exchange,提问作者Luc Fortunato
相关产品推荐
相关产品推荐

