我们在使用python做web自动化的过程中,经常会遇到文件上传的操作。对于文件上传存在input输入框情况,可以直接定位input元素,使用send_keys(filepath)方法实现。对于没有input输入框的文件上传,则需要借助第三方工具,在上传文件时打开系统窗口。以下是两个上传文件操作比较简单的工具
windows系统:pywinauto库
安装:pip install pywinauto
导入:from pywinauto.keyboard import send_keys
mac/Linux/window通用:pyautogui 跨平台
python3.8环境:先安装依赖 pip install pillow==6.2.2,再安装 pip install pyautogui
非python3.8环境:直接 pip install pyautogui
导入:import pyautogui
1,input元素使用send_keys()方法
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
URL = 'https://xxxx/kk-form/fs/fm/form/161519068236342881d3774ec5428571/fill'
driver.get(URL)
# 获取上传组件的元素
f = driver.find_element('xpath', "(//input[@class='van-uploader__input'])[1]")
# 使用send_keys直接发送文件路径即可
f.send_keys(r'/Users/lili/Documents/weixin.jpeg')
time.sleep(5)
driver.quit()
2,非input元素,window方法:使用pywinauto库
import pyautogui as pyautogui
from pywinauto.keyboard import send_keys
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
URL = 'https://xxxx/kk-form/fs/fm/form/161519068236342881d3774ec5428571/fill'
driver.get(URL)
f = driver.find_element('xpath', "(//input[@class='van-uploader__input'])[1]")
# 触发点击事件,让系统的弹框弹出来
f.click()
# 等待,因为弹框弹出来需要时间
time.sleep(1)
# 这里是pywinauto 的send_keys 方法
send_keys(r'/Users/lili/Documents/weixin.jpeg')
# 使用return提交
send_keys('{VK_RETURN}')
3,非input元素,mac/Linux/window的通用方法:pyautogui库
from selenium import webdriver
import pyautogui
import time
driver = webdriver.Chrome()
driver.implicitly_wait(10)
URL = 'https://xxxx/kk-form/fs/fm/form/161519068236342881d3774ec5428571/fill'
driver.get(URL)
f = driver.find_element('xpath', "(//input[@class='van-uploader__input'])[1]")
# 触发点击事件,让系统的弹框弹出来
f.click()
time.sleep(1)
# 写入路径
pyautogui.write(r'/Users/lili/Documents/weixin.jpeg')
# 敲回车:相当于点击【打开】按钮,需要敲2次,避免失败
pyautogui.press('enter', 2)