"""
上传文件的两种情况:
一种是通过input框:如果上传文件的元素节点是input标签时可以用这种方法,无需借助winauto中的send_keys方法
一种是通过js上传的:因为点击上传文件后,选择文件的弹窗不是网页的,而是电脑的系统弹窗,无法直接用selenium操作选择文件,
所以要借助winauto中的send_keys方法
js上传文件处理方法:
1、pywinauto
缺点:只能在windows上使用
优点:可以选择多个文件,路径中有中文也可以
2、pyautogui
优点: 跨平台(linux,mac,windows都可以用)
缺点:只能选择一个文件,文件路径有中文会出问题
pip install pywinauto -i https://mirrors.aliyun.com/pypi/simple/
pip install pyautogui -i https://mirrors.aliyun.com/pypi/simple/
"""
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from pywinauto.keyboard import send_keys
driver = webdriver.Chrome()
driver.get("#某个可以上传文件的网址#")
# -----input上传-----------
driver.find_element(by=By.XPATH, value="//#帮助定位的父类或祖上类元素#/input").send_keys("#文件路径#")
# ------------pywinauto 通过窗口上传单个文件----------------------
# from pywinauto.keyboard import send_keys
# 定位文件上传按钮,点击
driver.find_element(by=By.ID, value="#文件上传按钮的id值#").click()
# 输入文件路径
send_keys("#文件路径#")
# 输入回车键(确定)
send_keys('{VK_RETURN}')
# ------------pywinauto 通过窗口上传多个文件----------------------
# from pywinauto.keyboard import send_keys
# 定位文件上传按钮,点击
driver.find_element(by=By.ID, value="#文件上传按钮的id值#").click()
# 输入文件路径
send_keys('"#文件1的路径#"') # 多文件上传要加两层引号,因为多文件选择时,上传选择框里每个文件是用双引号引起来的
send_keys('"#文件2的路径#"')
send_keys('"#文件3的路径#"')
# 输入回车键(确定)
send_keys('{VK_RETURN}')
# ---------------pyautogui上传文件------------------------
# import pyautogui
driver.find_element(by=By.ID, value="#文件上传按钮的id值#").click()
pyautogui.write('#文件路径#')
pyautogui.press('enter', 2)
time.sleep(5)
driver.quit()