python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > python自动化

python+selenium的web自动化上传操作的实现

作者:测试框架师凃九

这篇文章主要介绍了python+selenium的web自动化上传操作的实现,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下

一、关于上传操作

上传有两种情况:

那这里针对以上两种情况分别介绍一下具体的解决方法。

二、input标签

定位到元素,然后直接使用send_keys(文件路径)输入路径,比较简单。

from selenium import webdriver
driver = webdriver.Chrome()
driver.get("http://xxxx")
driver.maximize_window()
 
# 定位上传文件元素
input_file = driver.find_element_by_id("xxx")
# 上传文件
input_file.send_keys(r"D:\learn\xx.txt")

三、第三方库pywin32

​ 非input标签的上传,则需要借助第三方工具。pywin32就是这样的一个第三方库,主要是方便python开发者快速调用windows API的一个模块库,可以识别上传对话框句柄进而操作。

安装命令:pip install pywin32。

​ 从上面的上传窗口,及WinSpy工具窗口,可以得出控制关系图如下:

​ 从上图可以看出:

​ 我们需要一步一步定位,从第一层开始往下去找,找到对应的窗口然后进行操作,步骤说明如下:

以上三步的相关函数说明如下:

​ 以下是封装好的上传函数,因为window的上传窗口是固定不变的,我们只需要封装好一个类知道如何去调用即可,不需要理解它的处理细节,但如果你有兴趣可以深入了解一下。

import win32gui
import win32con
 
# edit - combobox - comboBoxEx32 - #32770  编辑框在第四级
# button - #32770  打开按钮在第二级
 
# 前提:window上传窗口已经出现,最好sleep 1-2秒等待窗口出现
 
def upload(filepath, browser_type="chrome"):
    if browser_type == "chrome":
        title = "打开"
    else:
        title = ""
    # 找元素
    # 从一级开始找,一级窗口“#32770”,“打开”
    dialog = win32gui.FindWindow("#32770", title)  # FindWindow用于找大窗口
 
    # 二级之后都用FindWindowEx,需要四个参数,
    # 1、元素的父亲,2、从第一个子代开始找元素,3、元素的类型名(class),4、元素的文本值
    comboBoxEx32 = win32gui.FindWindowEx(dialog, 0, "ComboBoxEx32", None)  # 二级
    comBox = win32gui.FindWindowEx(comboBoxEx32, 0, "ComboBox", None)  # 三级
    # 编辑框
    edit = win32gui.FindWindowEx(comBox, 0, 'Edit', None)  # 四级
    # 打开按钮
    button = win32gui.FindWindowEx(dialog, 0, 'Button', '打开(&0)')  # 二级
 
    # 往编辑框输入文件路径
    win32gui.SendMessage(edit, win32con.WM_SETTEXT, None, filepath)  # 发送文件路径
    win32gui.SendMessage(dialog, win32con.WM_COMMAND, 1, button)  # 点击打开按钮
if __name__ == '__main__':
    upload('D:\\test.txt')

四、第三方工具pyautogui

​ 还有一种更方便的方法,就是借助第三方工具pyautogui,pyautogui是一个纯Python的GUI自动化工具,其目的是可以用程序自动控制鼠标和键盘操作,并且支持多平台(Windows,OS X,Linux)。强烈推荐!

下面以举例的html为例,需要先把该代码保存成html文件,后续直接访问这个本地html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1> hello world </h1>
<input type="file" name="mfile">
</body>
</html>

安装模块: pip install pyautogui,

操作只需要两步:

import os
import time
import pyautogui as ui
from selenium import webdriver
 
driver = webdriver.Chrome()
driver.implicitly_wait(20)      # 隐式等待
dir = os.getcwd()
html_dir = os.path.join(dir, 'demo.html')
driver.get(html_dir)
 
file_elem = driver.find_element_by_name('mfile')
file_elem.click()
 
# 系统之间要等待
time.sleep(1)
file_dir = os.path.join(dir, 'test.txt')	# 要上传的文件路径
# 写入文件
ui.write(file_dir)	# 直接调用写入
time.sleep(0.5)
# 输入回车键, presses表示按的次数,按一次不会生效,有可能是执行太快,建议presses=2
ui.press('enter', presses=2)
time.sleep(2)
driver.quit()

​ 不管是使用哪种上传方式,只要是操作系统的上传窗口,操作之前记得先等待一下。

总结

今天的文章就到这里了哟,需要获得下面福利的小伙伴可以私信我关键字“资料”获取哟。

项目实战

app项目,银行项目,医药项目,电商,金融

大型电商项目

全套软件测试自动化测试教学视频

300G教程资料下载【视频教程+PPT+项目源码】

全套软件测试自动化测试大厂面经

python自动化测试++全套模板+性能测试

到此这篇关于python+selenium的web自动化上传操作的实现的文章就介绍到这了,更多相关python自动化内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文