Python Selenium通过Href链接上传文件报错求助
解决Selenium文件上传的AttributeError问题
首先,你遇到的AttributeError: 'WebDriver' object has no attribute 'send_keys'是因为send_keys是网页元素(WebElement)的方法,不是WebDriver对象的方法,不能直接用driver.send_keys调用。但更核心的问题是:你点击a标签后弹出的是操作系统级别的文件选择窗口,Selenium根本没法直接控制这个窗口。
正确的做法是绕过这个弹窗,直接操作页面中隐藏的input[type="file"]元素——这是网页文件上传的标准实现,大部分网站的上传按钮(比如你看到的a标签)只是触发这个input的点击事件,实际的文件上传逻辑由这个input处理。
具体步骤:
- 定位到页面中的
input[type="file"]元素,通常它会被设置为隐藏(比如display: none),但Selenium依然可以定位到它。 - 直接对这个input元素调用
send_keys(file_path),传入你的本地文件路径,不需要点击那个a标签。
修正后的代码示例:
from selenium import webdriver from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get("你的目标网站URL") # 定位隐藏的文件上传input元素 upload_input = driver.find_element(By.CSS_SELECTOR, "input[type='file']") # 直接传入文件路径 upload_input.send_keys("你的本地文件绝对路径,比如C:/test/upload.txt")
补充说明:
- 如果找不到这个input元素,可以打开浏览器开发者工具(F12),在页面中搜索
input[type="file"],或者在点击a标签时观察元素变化,找到对应的input。 - 有些网站会给input设置特定的id或class,你可以根据实际情况调整定位器(比如用XPATH:
//input[@type='file'])。
内容的提问来源于stack exchange,提问作者RA.IBOY
相关产品推荐
相关产品推荐

