【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 osfile_path = 'D:\\ApowerRECData\\autoit5.png'
#执行保存的exe文件
os.system('2.exe %s '% file_path)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/480129.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出剖析典型文生图产品Midjourney

2022年7月,一个小团队推出了公测的 Midjourney,打破了 AIGC 领域的大厂垄断。作为一个精调生成模型,以聊天机器人方式部署在 Discord,它创作的《太空歌剧院》作品,甚至获得了美国「数字艺术/数码摄影」竞赛单元一等奖。 这一事件展示了 AI 在绘画领域惊人的创造力,让人们…

[MRCTF2020]Transform

查壳,拖入64位IDA LOBYTE8位就是一个字节,在此处无意义,因为我们输入的本来就是按字节输入的 设 a byte_414040,bdword_40F040,cbyte_40F0E0,输入的字符串为flag; 从题目里得到 加密代码 a[i] flag[b[i]]; a[i] ^ b[i]; c a 即c[i] a[i…

如何通过智能生成PPT,让演示文稿更高效、更精彩?

在快节奏的工作和生活中,我们总是追求更高效、更精准的解决方案。而在准备演示文稿时,PPT的制作往往成为许多人头疼的问题。如何让这项工作变得轻松且富有创意?答案或许就在于“AI生成PPT”这一智能工具的广泛应用。我们就来聊聊如何通过这些…

深入浅出UART驱动开发与调试:从基础调试到虚拟驱动实现

往期内容 本专栏往期内容:Uart子系统 UART串口硬件介绍深入理解TTY体系:设备节点与驱动程序框架详解Linux串口应用编程:从UART到GPS模块及字符设备驱动 解UART 子系统:Linux Kernel 4.9.88 中的核心结构体与设计详解IMX 平台UART驱…

【docker】安装数据库脚本

mysql5.7 Docker启动mysql7并挂载文件关闭大小写敏感,【docker】安装mysql-CSDN博客 docker run \--name mysql -d -p 3306:3306 \-v /docker/data/mysql/data:/var/lib/mysql \-v /docker/data/mysql/conf:/etc/mysql/conf.d \-e MYSQL_ROOT_PASSWORD密码 \-e TZ…

1 ISP一键下载

BOOT0BOOT1启动模式说明0X用户Flash用户闪存存储器,也就是Flash启动10系统存储器系统存储器启动,串口下载11SRAM启动SRAM启动,用于在SRAM中调试代码 闪存存储器 是STM32 的内置FLASH,一般使用JTAG或者SWD模式下载程序时,就是下载…

1、Three.js开端准备环境

准备工作 从 CDN 导入 1.安装 VSCode 2.安装 Node.js 3.查看Three.js最新版本 4.如何cdn引入: https://cdn.jsdelivr.net/npm/threev版本号/build/three.module.js 例如:https://cdn.jsdelivr.net/npm/threev0.170.0/build/three.module.js 我们需要…

Java 反射(Reflection)

Java 反射(Reflection) Java 反射(Reflection)是一个强大的特性,它允许程序在运行时查询、访问和修改类、接口、字段和方法的信息。反射提供了一种动态地操作类的能力,这在很多框架和库中被广泛使用&#…

[保姆式教程]使用labelimg2软件标注定向目标检测数据和格式转换

定向目标检测是一种在图像或视频中识别和定位对象的同时,还估计它们方向的技术。这种技术特别适用于处理有一定旋转或方向变化的对象,例如汽车、飞机或文本。定向目标检测器的输出是一组旋转的边界框,这些框精确地包围了图像中的对象&#xf…

深度学习模型:卷积神经网络(CNN)

一、前言 CNN 的发展历程可以追溯到 20 世纪 80 年代和 90 年代。受生物视觉系统的启发,研究人员开始探索如何构建专门用于处理图像数据的神经网络。早期的一些研究奠定了基础,例如 Fukushima 提出的 Neocognitron 模型。 随着时间的推移,到…

Git上传本地项目到远程仓库(gitee/github)

目录 序言一、创建git本地版本库二、连接远程仓库(以gitee为例)三、将项目提交到git(本地)版本库1.由工作区添加到暂存区2.由暂存区添加到版本库 四、将代码由本地仓库上传到 gitee远程仓库1.获取远程库与本地同步2.把当前分支 ma…

Java 基础面试 题(Java Basic Interview Questions)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

人工智能与传统控制系统的融合发展

在这个科技快速迭代的时代,人工智能技术正以前所未有的速度改变着我们的生活。在控制系统领域,AI技术的引入为传统控制带来了新的发展机遇和挑战。然而,这并不意味着传统控制将被完全取代,相反,AI与传统控制的深度融合…

Linux服务器安装mongodb

因为项目需要做评论功能,领导要求使用mongodb,所以趁机多学习一下。 在服务器我们使用docker安装mongodb 1、拉取mongodb镜像 docker pull mongo (默认拉取最新的镜像) 如果你想指定版本可以这样 docker pull mongo:4.4&#…

Qml-TabBar类使用

Qml-TabBar类使用 TabBar的概述 TabBar继承于Container 由TabButton进行填充,可以与提供currentIndex属性的任何容器或布局控件一起使用,如StackLayout 或 SwipeView;contentHeight : real:TabBar的内容高度,用于计算标签栏的隐…

Vue3的通灵之术Teleport

前言 近期Vue3更新了一些新的内容&#xff0c;我都还没有一个一个仔细去看&#xff0c;但是还是有必要去解读一下新内容的。就先从Teleport 开始吧。 官方对 Teleport 的解释是&#xff1a;<Teleport> 是一个内置组件&#xff0c;它可以将一个组件内部的一部分模板“传…

uniapp echarts tooltip formation 不识别html

需求&#xff1a; echarts 的tooltip 的域名太长&#xff0c;导致超出屏幕 想要让他换行 思路一&#xff1a; 用formation自定义样式实现换行 但是&#xff1a; uniapp 生成微信小程序&#xff0c; echart种的tooltip 的formation 识别不了html &#xff0c;自定义样式没办…

idea2024加载flowable6.8.1.36遇到的问题-idea启动flowable问题flowable源码启动问题

代码下载地址&#xff1a; https://gitee.com/hanpenghu_admin_admin/flowable6.8.1.git 1.首先是通过顶层目录maven clean install 发现很多子模块并不会install本地mavenStore库&#xff0c;这导致了&#xff0c;一堆相互依赖的模块报错找不到&#xff0c;所以需要根据报错…

DICOM医学影像应用篇——伪彩色映射 在DICOM医学影像中的应用详解

目录 引言 伪彩色映射的概念 基本原理 查找表&#xff08;Look-Up Table, LUT&#xff09; 步骤 示例映射方案 实现伪彩色映射的C代码 代码详解 伪彩色处理效果展示 总结 扩展知识 LUT 的基本概念 LUT 在伪彩色映射中的应用 示例 引言 在医学影像处理中&#xff0c…

【JavaEE 初阶】⽹络原理 - 初识

一、⽹络发展史 单机时代》局域网时代》广域网时代》移动互联网时代 1.独⽴模式 独⽴模式&#xff1a;计算机之间相互独⽴ 2.⽹络互连 随着时代的发展&#xff0c;越来越需要计算机之间互相通信&#xff0c;共享软件和数据&#xff0c;即以多个计算机协同⼯作来完成业务&am…