[python] 使用selenium+pywinauto模块处理弹窗中的图片/文件上传

这篇具有很好参考价值的文章主要介绍了[python] 使用selenium+pywinauto模块处理弹窗中的图片/文件上传。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在我们使用selenium模块操作浏览器完成一些任务时经常会遇到一些需要上传文件/图片的弹窗。例如,我们在编辑发送邮件时需要上传文件:

pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge

这些弹窗属于系统页面而非浏览器页面,所以只使用selenium模块是定位不到弹窗页面中的元素的,从而也就无法对元素进行操作完成上传。

前期准备

selenium模块

selenium是一个在自动化测试中广泛应用的模块,其在爬虫领域也有着很广泛的使用

模块安装

打开终端输入:

pip install selenium

这里有可能会遇到下载到一半挂掉的情况,这里给大家准备了一个selenium的清华镜像源

pip install --index https://mirrors.ustc.edu.cn/pypi/web/simple/ selenium

驱动安装配置

本篇文章使用Edge浏览器做示范,所以这里安装并配置Edge驱动

需要下载和配置其他浏览器的可以参考一下这位大佬的文章

selenium用法详解【从入门到实战】【Python爬虫】【4万字】

首先打开Edge浏览器中的设置

pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge
点击关于Microsoft Edge,获取Edge浏览器的版本

pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge
打开Edge浏览器驱动的官网进行下载,我这里是118.0.2088.61的64位版本,大家可以按照自己的版本下载,如果没有自己的版本安装最新版本的即可!

pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge
安装完成后,压缩包中就只有一个名为msedgedriver.exe的文件
pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge

将这个文件移动到你在编译器中使用的本地python环境中,和python.exe处于同级目录中即可!

pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge
在编译器中运行下列代码能够成功打开网站就代表成功配置了驱动

from selenium import webdriver
driver_edge=webdriver.Edge()
driver_edge.get("https://www.baidu.com/")

pywinauto

pywinauto是一个能够自动化 Windows 上的 GUI 应用程序的模块,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作

模块安装

方法同上,但是这里我没有找到镜像源,可能需要多尝试几次才能下载成功

pip install pywinauto

查看是否安装完成

pip list
`pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge

实战用例

这里我们使用百度的在线图片识别网站做弹窗上传test,该网站也可以通过对input对象使用send_keys来进行图片上传,各位也可以根据自己的任务举一反三,完整程序我会放在末尾,有需要的朋友可以自取。

打开弹窗

首先使用selenium模块打开网页

driver=webdriver.Edge()
driver.get("https://graph.baidu.com/pcpage/index?tpl_from=pc")
time.sleep(2)

定位到“本地上传”对象并点击

click_label=driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]').click()
time.sleep(2)

定位到”选择文件“对象并点击,打开弹窗

upload_label=driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div[7]/div/div/div[2]/div[2]/div').click()

定位弹窗并上传

这里要注意不同的浏览器打开的弹窗标题是不同的,我是用Edge浏览器打开的弹窗标题是”打开

# 创建当前页面列表
app = pywinauto.Desktop()
# 选择文件上传的窗口
dlg = app["打开"]
dlg.print_control_identifiers()
# 选择文件地址输入框,点击激活
dlg["Toolbar3"].click()

这里的print_control_indentifiers()方法是用来定位窗口元素的,相当于是定位到标题为”打开“的窗口。dlg["Toolbar3"].click()代表激活窗口,相当于打开窗口后点击窗口中的文件名输入框的操作。

# 键盘输入上传文件的路径
send_keys("D:\grasshopper_pre")
# 键盘输入回车,打开该路径
send_keys("{VK_RETURN}")
# 选中文件名输入框,输入文件名
dlg["文件名(&N):Edit"].type_keys('1.jpg')
# 点击打开
dlg["打开(&O)"].click()

接上述操作,接下来找到要上传的文件,先在输入框中使用send_keys()函数输入图片的路径并使用send_keys("{VK_RETURN}")进行回车操作,即可以找到图片。随后输入图片名称并点击“打开”按键即可。

结果展示

这里附上我自己的测试用例图片链接,大家可以下载后尝试一下!

蝗虫图片

上传效果如下gif所示,我这里为了展示效果设置了强制等待,实际输入上传的时间要短的多。

pywinauto+selelinum,selenium,python,selenium,开发语言,web,爬虫,自动化,edge

完整示例代码

from selenium import webdriver
import time
from selenium.webdriver.common.by import By
import warnings
warnings.filterwarnings("ignore")
import pywinauto
from pywinauto.keyboard import send_keys

driver=webdriver.Edge()
driver.get("https://graph.baidu.com/pcpage/index?tpl_from=pc")
time.sleep(2)
click_label=driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div[7]/div/span[1]/span[1]').click()
time.sleep(2)
upload_label=driver.find_element(By.XPATH,'//*[@id="app"]/div/div[1]/div[7]/div/div/div[2]/div[2]/div').click()
# 创建当前页面列表
app = pywinauto.Desktop()
# 选择文件上传的窗口
dlg = app["打开"]
dlg.print_control_identifiers()
# 选择文件地址输入框,点击激活
dlg["Toolbar3"].click()
# 键盘输入上传文件的路径
send_keys("D:\grasshopper_pre")
# 键盘输入回车,打开该路径
send_keys("{VK_RETURN}")
# 选中文件名输入框,输入文件名
dlg["文件名(&N):Edit"].type_keys('1.jpg')
# 点击打开
dlg["打开(&O)"].click()

总结

以上就是使用python中的selenium和pywinauto模块进行弹窗文件/图片上传的所有过程啦,第一次写blog,有什么问题还请大家海涵!有问题欢迎在评论区留言,希望大家能够多多点赞收藏,你们的点赞收藏就是我创作的动力喔!文章来源地址https://www.toymoban.com/news/detail-773927.html

到了这里,关于[python] 使用selenium+pywinauto模块处理弹窗中的图片/文件上传的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Selenium alert 弹窗处理!

    页面弹窗有 3 种类型: alert(警告信息) confirm(确认信息) prompt(提示输入) 对于页面出现的 alert 弹窗,Selenium 提供如下方法: 序号 方法/属性 描述 1 accept() 接受 2 dismiss() 取消 3 text 获取显示的文本 4 send_keys() 输入内容 对应 处理方式 : alert(警告信息):WebDriver.switc

    2024年02月04日
    浏览(27)
  • element-ui中更换el-dialog弹窗中默认的关闭按钮

    在使用 element-ui 框架里的 el-dialog 组件时,要修改弹窗里默认的关闭图标;如下图所示:左边是想要替换后的;右边是组件默认的关闭图标; 通过检查组件的元素;发现组件默认的关闭是一个图标;通过图标的形式展现的。 那就可以通过 CSS 隐藏当前的图标;然后在当前图标

    2024年02月12日
    浏览(38)
  • Selenium自动化之弹窗处理

     整理了一些软件测试方面的资料、面试资料(接口自动化、web自动化、app自动化、性能安全、测试开发等),有需要的小伙伴可以文末加入我的学习交流qun,无套路自行领取~  我们在使用Selenium做Web自动化测试时,页面经常出现弹窗,如果不处理后续的测试脚本就无法正常

    2024年02月08日
    浏览(68)
  • Selenium最简单的处理登录弹窗的方式

    大家在使用selenium自动化任务时, 遇到上图登录窗口时要如何处理? 以Python为例, 网上能找到的方法几乎都是使用第三方库例如pyautogui等模拟键盘输入, 或者通过GUI的方式来操作登录, 而selenium似乎也没有提供此类弹窗的处理方式(如果有请务必留言让我知道, 万分感谢!) 以下提供

    2024年02月11日
    浏览(31)
  • JAVA+Selenium最简单的处理登录弹窗的方式

     在做自动化测试遇到需要处理登录弹窗情况,例如我的用户名为admin, 密码为admin, 那么想要登录http://10.10.168.1, 只需要使用以下链接访问即可立即登录, 并免除弹窗: http://账号:密码@网址  

    2024年02月16日
    浏览(31)
  • 【Python】Selenium模块使用

    Selenium 是一个用于自动化网页浏览器的工具和框架。它提供了一组用于操作浏览器的 API,可以实现模拟用户在浏览器中的各种行为,如点击、输入文本、提交表单等。 Selenium 最初是为测试 Web 应用程序而创建的,但随着时间的推移,它已经发展成为一种强大的工具,用于各种

    2024年02月12日
    浏览(28)
  • pywinauto结合selenium实现文件上传

    PC端-Windows上的元素识别可用viewWizard工具 PC端-Windows上的元素操作可用pywinauto库 浏览器上网页的元素识别可用selenium pip installer pywinauto pywinauto官方文档 1、win32 API(backend=“win32”) 一般是MFC、VB6、VCL,简单的WinForms控件和大多数旧的应用程序 2、MS UI Automoation API(backend=“uia”) 一

    2024年02月13日
    浏览(30)
  • Python中Selenium模块的使用详解

    Selenium的介绍、配置和调用 Selenium(浏览器自动化测试框架)  是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试浏览器的兼

    2024年02月02日
    浏览(28)
  • Python selenium驱动下载,模块安装以及基本使用

    视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 我们以谷歌浏览器为例讲解。首先我们要去下载谷歌浏览器驱动。 谷歌浏览器驱动下载地址:Chromium History Versions Download ↓ 查看谷歌浏览器版本 右上角三个点 - 帮助 - 关于 我们下载解压后的驱动,

    2024年02月06日
    浏览(39)
  • python selenium 定位鼠标悬浮后的新弹窗数据

            最近需要获取网页上的标签数据,但是标签大于3个以后是隐藏的,需要鼠标hover上去才显示。如下图,图一是刚进来界面展示的,需要知道额外的7个标签则需要将鼠标移动到目标上面去。            但是比较尴尬的一个点是,当游览器打开F12后,使用鼠标去选中关

    2024年02月06日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包