如何使用Selenium Python结合给定脚本实现文件上传?
解决Selenium上传Google图片的问题
你当前的核心问题是选错了操作元素:你给一个<span>元素调用send_keys()是无效的,Selenium实现文件上传必须操作页面中type="file"的<input>元素——这是浏览器原生支持接收文件路径的唯一元素。
正确的实现步骤:
- 不需要点击页面上的上传按钮(点击后会弹出系统级文件选择框,Selenium无法直接操作这个弹窗)
- 直接找到页面中隐藏的
type="file"输入框,对它调用send_keys()传入本地文件路径即可
修改后的完整代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC browser = webdriver.Chrome() browser.maximize_window() wait = WebDriverWait(browser, 20) browser.get('https://www.google.com/') # 点击图片搜索入口 browser.find_element(By.XPATH, '/html/body/div[1]/div[3]/form/div[1]/div[1]/div[1]/div/div[3]/div[3]/img').click() # 等待并定位到隐藏的file input元素 file_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[type="file"]'))) # 直接传入文件路径 file_input.send_keys('C:/Users/avu/caha.png')
补充说明:
如果遇到网站把type="file"元素设置为隐藏(比如display: none)的情况,可先通过JavaScript让元素可见再执行上传:
# 若元素隐藏,先执行JS让它可见 browser.execute_script("arguments[0].style.display = 'block';", file_input) file_input.send_keys('C:/Users/avu/caha.png')
内容的提问来源于stack exchange,提问作者Chetan
相关产品推荐
相关产品推荐

