当前位置: 首页 > article >正文

【05】Selenium+Python 两种文件上传方式(AutoIt)

上传文件的两种方式

一、input标签上传文件

在这里插入图片描述

可以用send_keys方法直接上传文件
示例代码

'''
input标签上传文件
'''
import time
from selenium import webdriver
from chromedriver_py import binary_path # this will get you the path variable
from selenium.webdriver.common.by import By  # 导入 By 模块

#打印浏览器驱动路径
print(binary_path)
svc = webdriver.ChromeService(executable_path=binary_path)
driver = webdriver.Chrome(service=svc)

try:
    # 打开上传文件网页
    driver.get("http://sahitest.com/demo/php/fileUpload.htm")
    time.sleep(2)

    # 找到上传文件按钮并上传文件
    driver.find_element(By.ID, "file").send_keys("D:\\ApowerRECData\\byid.png")
    time.sleep(5)
finally:
    # 关闭浏览器
    driver.quit()

二、非input标签上传文件,比如div或者其他的标签

在这里插入图片描述

这种不能直接在网页上处理上传,只能打开OS弹窗,去处理弹窗。
对于OS弹窗涉及的层面已经不是selenium能解决的了,只能用OS层面的操作去处理。
AutoIt 可以做OS层面的操作,我们可以用AutoIt编写OS层面的操作脚本,再用Python去调用。

1、AutoIt操作

(1)下载安装
官网下载地址:https://www.autoitscript.com/site/autoit/downloads/
在这里插入图片描述
下载后按步骤安装即可

(2)查找上传文件弹窗对应属性值

打开需要上传文件的页面,点击上传,打开文件上传弹窗
在这里插入图片描述

从开始菜单打开AutoIt Window Info (x64)
在这里插入图片描述

把Finder Tool中间的圆圈拖动到文件名的位置,获取弹窗和文件名的值
在这里插入图片描述
在这里插入图片描述

把Finder Tool中间的圆圈拖动到打开按钮的位置,获取打开按钮的值
在这里插入图片描述

(3)编写AutoTt上传文件脚本
从开始菜单打开SciTE Script Editor,将获取到的信息编写成脚本
在这里插入图片描述
代码:

; 等待5秒钟,让上传窗口出现
WinWait("[CLASS:#32770]","",5)

;把输入焦点定位到上传输入文本框中,类型为Edit,编号为1,也就是上面获取到内容
ControlFocus("打开", "","Edit1")  

;在文件名那里,输入需要上传的文件绝对路径
ControlSetText("打开", "", "Edit1", 'D:\ApowerRECData\byid2.png')

;等待上传时间,单位是毫秒 1= 1000 毫秒,文件大的话需要设置长点
Sleep(5000)

;点击"打开"按钮,也就是上传,完成整个上传过程
ControlClick("打开", "","Button1");

一个问题:
注释中文在脚本中显示为乱码,出现这个问题可以参考这篇博客解决:https://blog.csdn.net/ldq_sd/article/details/116587438

完成后,可以在网页打开文件上传弹窗,在脚本里按F5 或点Tools-go 运行脚本
在这里插入图片描述

(4)把脚本转为exe可执行文件
从开始菜单打开Compile Script to .exe (x64),把脚本转为exe可执行文件
在这里插入图片描述

2、使用python调用可执行文件

使用os模块的os.system()方法调用可执行文件

import os

#执行保存的exe文件 注意这个文件路径不要有中文和空格,不然可能执行不了脚本
os.system(r'D:\1.exe')

3、完整Selenium代码

	#查找上传文件并点击
    WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable(
            (By.XPATH, "//div[@class='el-upload-dragger']"))).click()
            
    # 这个等待时间必须要有,等待文件上传弹窗出现,不然执行不了脚本
    time.sleep(5)
    
    #执行上传文件脚本 注意这个文件路径不要有中文和空格,不然可能执行不了脚本
    os.system(r'D:\1.exe')
    
    time.sleep(2)

4、AutoIt参数化

按照之前的脚本代码,上传其他的文件,就要重新写一次脚本,重新转换为exe,非常麻烦,可以将脚本里的文件名进行参数化,后面执行只需要传对应文件名即可。
(1)修改脚本,重新转换为可执行文件
只用将之前脚本里面的文件路径改为参数 $CmdLine[1] 即可
在这里插入图片描述

; 等待5秒钟,让上传窗口出现
WinWait("[CLASS:#32770]","",5)

;把输入焦点定位到上传输入文本框中,类型为Edit,编号为1,也就是上面获取到内容
ControlFocus("打开", "","Edit1")  

;在文件名那里,输入需要上传的文件绝对路径
ControlSetText("打开", "", "Edit1", $CmdLine[1])

;等待上传时间,单位是毫秒 1= 1000 毫秒,文件大的话需要设置长点
Sleep(5000)

;点击"打开"按钮,也就是上传,完成整个上传过程
ControlClick("打开", "","Button1");

然后同样的,将脚本转换为exe可执行文件

(2)python调用
使用参数化调用可执行文件,需要把可执行文件放在python路径下才行
在这里插入图片描述
python代码

'''
上传文件
参数化调用可执行文件
'''
import os

file_path = 'D:\\ApowerRECData\\autoit5.png'
#执行保存的exe文件
os.system('2.exe %s '% file_path)

http://www.kler.cn/a/414425.html

相关文章:

  • 【软考速通笔记】系统架构设计师④——系统工程基础知识
  • vue3-setup基本使用(非响应式数据)
  • Java开发工程师最新面试题库系列——Java基础部分(附答案)
  • Eclipse 创建 Java 接口
  • Java 反射(Reflection)
  • 养老院、学校用 安科瑞AAFD-40Z单相电能监测故障电弧探测器
  • 计算机网络八股整理(二)
  • http账号密码认证Http Basic Auth
  • Kafka日志索引详解以及生产常见问题分析与总结
  • 微信小程序下拉刷新与上拉触底的全面教程
  • 刷题分享11_28
  • MySQL乐观锁
  • SpringCloud之Config:从基础到高级应用
  • verilog实现开方运算/基于迭代法的平方根计算算法/FPGA实现开根号算法
  • for (int i = 0, j = 0; ;){ 修改j }每次循环j会被重新赋值为0吗 详解
  • 【Python入门】Python数据类型
  • 【JavaEE初阶 — 网络编程】TCP流套接字编程
  • C语言——海龟作图(对之前所有内容复习)
  • 【单片机毕业设计12-基于stm32c8t6的智能称重系统设计】
  • Qt中QML和C++混合编程
  • 华为光学博士面试经验
  • 【AI系统】从 CUDA 对 AI 芯片思考
  • 未来已来?AI技术革新改变我们的生活
  • vscode自动打印日志插件
  • 【k8s深入理解之 Scheme 补充-1】理解 Scheme 中资源的注册以及 GVK 和 go 结构体的映射
  • 同时在github和gitee配置密钥