十二 文件上传操作

首先,将下面html代码保存到一个文件中
后续第一种上传文件方式的代码小案例都是访问此html的




    
    Title


      


方式一:input标签上传文件

比较简单,可以定位input标签后,直接 .send_keys() 就可以了

from selenium import webdriver
import os

driver = webdriver.Chrome()


driver.get("file:///"+os.getcwd()+os.sep+"input标签文件上传.html")
driver.maximize_window()

# 定位上传文件元素input[type=file]
pic = driver.find_element_by_id("pic")

# 上传文件
pic.send_keys(os.getcwd()+os.sep+"test.png")

driver.quit()
image.png

方式二:非input标签上传文件

import win32gui
import win32con
driver = webdriver.Chrome()
# 打开上传网站
driver.get("https://tinypng.com/")

time.sleep(2)
# 触发文件上传的操作
driver.find_element_by_css_selector("section.target").click()

time.sleep(2)
# 一级顶层窗口
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)

# 二级窗口 -- 打开按钮
button = win32gui.FindWindowEx(dialog, 0, "Button", None)

# 1、输入文件路径
filepath = os.getcwd()+os.sep+"test.png"
win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)

# 2、点击打开按钮
win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)

time.sleep(6)

driver.quit()

封装

import win32gui
import win32con

# edit - combox - comboBoxEx32 - #32770

# 1\找到输入框和打开按钮 元素;2、输入地址,点击打开。

# 前提 :windows上传窗口已经出现。sleep1-2秒等待弹出的出现。
def upload(filePath,browser_type="chrome"):
    if browser_type == "chrome":
        title = "打开"
    else:
        title = ""

    #找元素
    #一级窗口"#32770","打开"
    dialog = win32gui.FindWindow("#32770",title)
    #
    ComboBoxEx32 = win32gui.FindWindowEx(dialog,0,"ComboBoxEx32",None)  #二级
    comboBox = win32gui.FindWindowEx(ComboBoxEx32,0,"ComboBox",None)   #三级
    #编辑按钮
    edit = win32gui.FindWindowEx(comboBox,0,'Edit',None)    #四级
    #打开按钮
    button = win32gui.FindWindowEx(dialog,0,'Button',"打开(&O)")   #二级
    # button = win32gui.FindWindowEx(dialog, 0, "Button", None)


    #往编辑当中,输入文件路径 。
    win32gui.SendMessage(edit,win32con.WM_SETTEXT,None,filePath)    #发送文件路径
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)    #点击打开按钮


if __name__ == '__main__':
    from selenium import webdriver
    import os, time
    driver = webdriver.Chrome()
    # 打开上传网站
    driver.get("https://tinypng.com/")

    time.sleep(5)
    # 触发文件上传的操作
    driver.find_element_by_css_selector("section.target").click()

    time.sleep(1)
    upload(r"D:\softwaredate\python_web_auto\web\练习web\tests.png")
    time.sleep(8)
    driver.quit()

你可能感兴趣的:(十二 文件上传操作)