python-UI文件上传

我们在使用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)

你可能感兴趣的:(python-UI文件上传)