Python使用Selenium上传文件时如何避免弹出系统文件选择窗口
Selenium文件上传功能实现方案
方案1:直接通过Selenium操作文件上传控件(推荐,无需处理系统弹窗)
这是最稳定的方案,不需要操作系统级的文件资源管理器窗口,核心是定位正确的DOM元素:
- 不要定位页面上可见的、点击会弹出窗口的「上传按钮」,要找该按钮关联的隐藏
<input type="file">元素,Selenium的send_keys传入文件路径的方法仅对该类型元素生效 - 修正文件路径的转义问题:Windows系统下路径中的反斜杠是Python转义符,需要用原始字符串或者双反斜杠处理,否则路径会识别错误
修正后的代码示例:
# 先定位type为file的input元素,不要定位错可见的上传按钮 upload_input = driver.find_element_by_xpath("//input[@type='file']") # 路径前加r声明为原始字符串,避免转义符识别异常 upload_input.send_keys(r'C:\Users\bodig\Downloads\image1.jpg')
如果该input元素被设置为隐藏不可见,可以先执行JS修改其可见性再操作:
upload_input = driver.find_element_by_xpath("//input[@type='file']") # 执行JS移除元素隐藏属性 driver.execute_script("arguments[0].style.display = 'block';", upload_input) upload_input.send_keys(r'C:\Users\bodig\Downloads\image1.jpg')
方案2:通过桌面自动化工具操作文件选择窗口
如果页面上传逻辑经过特殊封装,无法直接定位到input元素,可以使用PyAutoGUI这类桌面自动化工具操作弹窗,该方案需要保证操作时文件选择窗口处于前台焦点:
import pyautogui import time # 点击页面上传按钮调出文件选择窗口 driver.find_element_by_xpath(upload1xpath).click() # 等待窗口加载完成 time.sleep(1) # 输入文件完整路径 pyautogui.write(r'C:\Users\bodig\Downloads\image1.jpg') # 按下回车确认选择完成上传 pyautogui.press('enter')
内容的提问来源于stack exchange,提问作者Gabriel Ferguson
相关产品推荐
相关产品推荐

