Selenium:上传文件组件处理总结

input 标签类型文件上传组件处理

input 标签类型的文件上传组件可直接通过send_keys()上传文件

页面示例

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++ 介绍:百度百科介绍
  1. 通过spy++ 工具查探到整个谷歌浏览器上传文件弹窗的结构
    Spy++
  2. 可在工具内通过右击控件查看到元素属性
    在这里插入图片描述

在这里插入图片描述
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版权协议,转载请附上原文出处链接和本声明。