input 标签类型文件上传组件处理
input 标签类型的文件上传组件可直接通过send_keys()上传文件
- 示例网址:示例页面 - 百度图片搜索
- HTML input 标签介绍:HTML input 标签介绍
- 示例文件:1.png

import os
import time
from selenium.webdriver.common.by import By
from selenium import webdriver
url = 'https://image.baidu.com/' # 示例页面 - 百度图片地址
uploader = (By.XPATH, "//*[@type='file']")
image = os.path.join(os.getcwd(), '1.png') # 测试图片
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(url)
driver.find_element(*uploader).send_keys(image)
driver.quit()
非input 标签类型文件上传组件处理
根据baidu资料整理所得
- 方案:使用Spy++ 完成上传弹窗的元素定位,然后通过win32gui实现文件上传
- 工具:python + win32gui + spy++
- 测试浏览器:谷歌浏览器
- spy++ 介绍:百度百科介绍
- 通过spy++ 工具查探到整个谷歌浏览器上传文件弹窗的结构

- 可在工具内通过右击控件查看到元素属性


4. 主窗体属性示例
import os
import time
import win32gui, win32con
from selenium.webdriver.common.by import By
from selenium import webdriver
url = 'https://image.baidu.com/' # 示例页面 - 百度图片地址
uploader = (By.XPATH, "//*[@type='file']")
camera = (By.XPATH, "//*[@class='st_camera_off']")
choose_img = (By.XPATH, "//*[@id='uploadImg']")
image = os.path.join(os.getcwd(), '1.png') # 测试图片
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get(url)
# 打开上传文件弹窗
driver.find_element(*camera).click()
time.sleep(2)
driver.find_element(*choose_img).click()
time.sleep(3)
# 窗体以及窗体内元素定位
window = win32gui.FindWindow("#32770", "打开") # 谷歌
# window = win32gui.FindWindow("#32770", "文件上传") # 火狐
ComboBoxEx32 = win32gui.FindWindowEx(window, 0, "ComboBoxEx32", None)
ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, "ComboBox", None)
Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None)
Button = win32gui.FindWindowEx(window, 0, 'Button', "打开(&O)")
# 对窗体内的输入框输入待上传的文件地址
win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, image)
# 操作打开按钮
win32gui.SendMessage(window, win32con.WM_COMMAND, 1, Button)
driver.quit()
版权声明:本文为qq_21238607原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。