input标签的
对于input标签实现的文件上传,看成输入框,直接send_keys
非input标签的
要使用第三方库:
方式1: pip install pypiwin32
要点:图片路径要写路径
方式2:pip install pyautogui
方式3:pip install pywinauto(未尝试)
input标签和 非input标签上传文件演示代码
from selenium import webdriver
import time
# 创建浏览器驱动对象
from selenium.webdriver.common.by import By
driver = webdriver.Chrome() # 参数写浏览器驱动文件的路径,若配置到环境变量就不用写了
# 访问网址
driver.get("http://42.192.62.186:8088/index.html#/")
driver.maximize_window()
# 账号密码
driver.find_element(By.CSS_SELECTOR, '#username').send_keys('sq3')
driver.find_element(By.CSS_SELECTOR, '#password').send_keys('123')
driver.find_element(By.CSS_SELECTOR, '#code').send_keys('999999')
driver.find_element(By.CSS_SELECTOR,"#submitButton").click()
time.sleep(1)
driver.refresh()
"""input单文件上传"""
time.sleep(1) # 刷新頁面有延迟
driver.find_element(By.XPATH,'//*[contains(text(),"文件上传")]').click()
time.sleep(1) # 下拉框展开有延迟
driver.find_element(By.XPATH,'//*[contains(text(),"单文件上传")]').click()
time.sleep(1) # 渲染页面有延时
driver.find_element(By.CSS_SELECTOR, '#cover').send_keys('E:\django\接口准备1\window.png') # 直接 send_keys 只能是全路径
time.sleep(1.5) # 页面渲染需要时间
driver.find_element(By.XPATH,'//*[contains(text(),"确认上传")]').click()
# 关闭弹窗,这个弹窗是个元素,定位到,点击即可
driver.find_element(By.CSS_SELECTOR,'.el-button--default').click()
"""非input单文件上传"""
driver.find_element(By.XPATH,'//*[contains(text(),"单文件上传(非input)")]').click()
time.sleep(1)
# 点击添加文件
driver.find_element(By.CSS_SELECTOR, '.el-icon-upload').click()
time.sleep(2)
# ---------------方式1--------------------
# import win32com.client
# sh = win32com.client.Dispatch("WScript.shell")
# sh.Sendkeys("E:\\app.png\r\n")
# ---------------方式1--------------------
# ---------------方式2------------------
import pyautogui
import pyperclip
# 1
pyperclip.copy('E:\\app.png') # 将图片文件复制到剪贴板上
pyperclip.paste()
pyautogui.hotkey('ctrl','v')
# 2
# pyautogui.typewrite('E:\\app.png') # 这个方式不稳妥了
time.sleep(3) # 需要等一下,
# 模拟键盘操作
pyautogui.press('enter')
# ----------------方式2-----------------------------
# ----------------方式3
# from pywinauto.keyboard import send_keys
time.sleep(2) # 上传需要时间
driver.find_element(By.XPATH,'//*[contains(text(),"确认上传")]').click()
# driver.close()
# driver.quit() # 这个的效果就是离开整个浏览器