前言
在我们使用selenium模块操作浏览器完成一些任务时经常会遇到一些需要上传文件/图片的弹窗。例如,我们在编辑发送邮件时需要上传文件:
这些弹窗属于系统页面而非浏览器页面,所以只使用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浏览器中的设置
点击关于Microsoft Edge,获取Edge浏览器的版本
打开Edge浏览器驱动的官网进行下载,我这里是118.0.2088.61的64位版本,大家可以按照自己的版本下载,如果没有自己的版本安装最新版本的即可!
安装完成后,压缩包中就只有一个名为msedgedriver.exe的文件
将这个文件移动到你在编译器中使用的本地python环境中,和python.exe处于同级目录中即可!
在编译器中运行下列代码能够成功打开网站就代表成功配置了驱动
from selenium import webdriver
driver_edge=webdriver.Edge()
driver_edge.get("https://www.baidu.com/")
pywinauto
pywinauto是一个能够自动化 Windows 上的 GUI 应用程序的模块,它支持鼠标、键盘操作,在元素控件树较复杂的界面,可以辅助我们完成自动化操作
模块安装
方法同上,但是这里我没有找到镜像源,可能需要多尝试几次才能下载成功
pip install pywinauto
查看是否安装完成
pip list
`
实战用例
这里我们使用百度的在线图片识别网站做弹窗上传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所示,我这里为了展示效果设置了强制等待,实际输入上传的时间要短的多。
文章来源:https://www.toymoban.com/news/detail-773927.html
完整示例代码
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模板网!