测试链接:http://www.sahitest.com/demo/php/fileUpload.htm
1.第一种形式:
input输入框上传文件:可以理解为普通的输入框输入,我们只要传入文件路径即可。
#普通input框上传文件 from selenium import webdriver driver = webdriver.Chrome() driver.get('http://sahitest.com/demo/php/fileUpload.htm') upload = driver.find_element_by_id('file') upload.send_keys(r'C:Usersxibo.zhuworkmyselfmyProjectdatapicture est_picture.png') # send_keys print(upload.get_attribute('value') ) # check value driver.quit()
2.第二种形式
非input型上传:
大体上有以下几种解决方案:
1.autoIT,借助外力,我们去调用其生成的au3或exe文件。
2.Python pywin32库,识别对话框句柄,进而操作
3.SendKeys库
4.keybd_event,跟3类似,不过是模拟按键,ctrl+a,ctrl+c, ctrl+v…
2.win32gui
1 首先安装pywin32库(命令:pip install pywin32)
from selenium import webdriver import win32gui import win32con import time dr = webdriver.Chrome() dr.get('http://localhost/test/fileupload.html') upload = dr.find_element_by_id('file') upload.click() time.sleep(1) def upload_file(filepath,multiple=None): ''' 非input输入框文件上传 :param filepath: 上传文件的路径,如果传多个文件,文件路径格式为 '"d:\baidu.py" "d:\upload.py" "d:\1.html"' 中间用空格隔开 :param multiple: 是否传递多个文件,默认传一个文件 :return: ''' try: # win32gui dialog = win32gui.FindWindow('#32770', '文件上传') # 对话框 ComboBoxEx32 = win32gui.FindWindowEx(dialog, 0, 'ComboBoxEx32', None) ComboBox = win32gui.FindWindowEx(ComboBoxEx32, 0, 'ComboBox', None) Edit = win32gui.FindWindowEx(ComboBox, 0, 'Edit', None) # 上面三句依次寻找对象,直到找到输入框Edit对象的句柄 button = win32gui.FindWindowEx(dialog, 0, 'Button', None) # 确定按钮Button if multiple==None: win32gui.SendMessage(Edit, win32con.WM_SETTEXT, None, filepath) # 往输入框输入绝对地址 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 按button else: win32gui.SendMessage(Edit, win32con.WM_SETTEXT, 0, filepath) # 往输入框输入绝对地址 win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button) # 按button return True except Exception as e: return False
3.# 对于非 input 标签实现的上传功能,我们通过模拟键盘敲击的方式实现
注意:1:文件路径过长的话,可能出现路径输入不全。 2:该方法不太稳定。
# 对于非 input 标签实现的上传功能,我们通过模拟键盘敲击的方式实现 # 触发文件上传的功能 driver.find_element_by_css_selector("figure.icon").click() time.sleep(3) # 模拟键盘敲击,会不管不顾的敲击,只要代码运行到这里,就敲 sh = win32com.client.Dispatch("WScript.shell") sh.Sendkeys("D:\UserslenovoPycharmProjectsscriptstudyseleniumStuday4ele.png ") # 注意:代码运行过程不要操作鼠标 # 输入法要保持英文输入的状态
具体见链接:https://www.jb51.net/article/92678.htm