selenium中元素操作之上传操作(六)

上传操作分为两种情况:

1、input标签上传

如果是input可以直接输入路径的,那么直接调用send_keys输入路径,和前边的元素操作类似,在这里不再过多的赘述。

2、非input标签上传

非input标签上传的,则需要借助第三方的工具:

这里我们用python中的第三方库pywin32库,识别对话框句柄,进而进行上传操作

首先安装第三方库:pip install pywin32

借助winspy来辅助定位,winspy下载地址:https://sourceforge.net/projects/winspyex/

winspy工具使用的是绝对定位,和selenium中的元素定位方式不同

通过借助winspy工具定位出了对应元素的路径,就可以通过pywin32库来实现上传操作啦!

1、filePath是上传文件所在的绝对路径

2、如果你的浏览器是谷歌那么不用管,如果是其他的浏览器,看你弹出上传窗口的左上角的名字是什么,写入到else里的title=" "里边。

3、遇到Windows窗口上传的元素定位时,直接调用这个方法就可以:upload(C:文件上传.txt)

比如火狐浏览器与谷歌不同,它的title="文件上传"

import win32gui
import win32con


def upload(filePath, browser_type="chrome"):
    '''
    通过pywin32模块实现文件上传的操作
    :param filePath: 文件的绝对路径
    :param browser_type: 浏览器类型(默认值为chrome)
    :return:
    '''
    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)")  # 二级

    # 输入文件的绝对路径,点击“打开”按钮
    win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filePath)  # 发送文件路径
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点击打开按钮
原文地址:https://www.cnblogs.com/xingyunqiu/p/11558936.html