利用Python+Selenium+AutoIt模拟键盘 *** 作!表弟进的小网站很好看

利用Python+Selenium+AutoIt模拟键盘 *** 作!表弟进的小网站很好看,第1张

概述前言在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中d出的文件选择框,selenium就实现不了了,所以就需引用AutoIt工具来实现。

前言

在web页面中,可以使用selenium的定位方式来识别元素,从而来实现页面中的自动化,但对于页面中d出的文件选择框,selenium就实现不了了,所以就需引用autoIt工具来实现。

autoIt介绍

autoIt简单介绍下,autoIt 目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于windows GUI(图形用户界面)中进行自动化 *** 作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。而这是其它语言不可能做到或无可靠方法实现的(例如VBScript和SendKeys)。

实现原理:

使用autoIT下的工具去定位页面外的元素属性值,其次再利用autoIT下的工具编写合适的脚本,然后将脚本编译成可执行文件,最后在自动化实现时,直接调用此脚本实现文件的上传、下载等 *** 作。

备注:定位元素、编写脚本和编译,需要借助autoIT提供的工具,但是脚本编译成可执行文件后,可以直接使用。

加\/X:mmp9972   即可获取数十套pdf哦!

autoIt的下载与安装就不再赘述,下载地址如下:https://www.autoitscript.com/site/autoit/downloads/

安装成功后会出现如下菜单:

autoIt工具使用

1.autoIT Window Info用来识别windows控件,根据识别的控件信息编写脚本;x86为32位

2.SciTE Script Editor用来写脚本,并保存为au3格式,按F5可以调试代码,但需要是 *** 作d框(上传/下载/另存为d框)开启的情况下

3.ComplIE Script to .exe, 将刚编写的脚本,编译成可执行文件;

4.编译后在Python代码中调用

想必介绍到这,或多或少有所了解了,对autoIT工具下的功能点也清楚了,Run Script是运行脚本的,我们是要到Python代码中调用,所以此处就略过了。

实例讲解

接下来就用一个实例来讲解下autoIT工具的具体使用,实例功能是:把百度首页中的百度图片另存为到本地或任意磁盘

在做这个事情的时候,我们要知道,步骤是先要选中图片,并右击,选择另存为,然后输入文件名以及保存的位置,最后点击保存。人工 *** 作鼠标很简单,但现在是要使用代码来实现该功能,可细化分为四步,如下:

1.使用Selenium功能d出右键菜单

2.利用win32API选择相关菜单

3.调用autoIT实现另存为 *** 作

4.到Python代码中调用

实现第一步,在浏览器中定位到图片元素,代码如下:

context = driver.find_element_by_CSS_selector(".index-logo-src")ActionChains(driver).context_click(context).perform()

实现第二步,模拟键盘 *** 作,鼠标移到另存为处,使用win32API *** 作,代码如下:

win32API.keybd_event(40,0)time.sleep(1)win32API.keybd_event(40,0)time.sleep(1)win32API.keybd_event(13,win32con.KEYEVENTF_KEYUP,0)time.sleep(1)

win32API的键盘码如下:

上面代码的13与40按键对应的是回车与下键,在键盘码的图片中很详细

实现上述两步代码后,会d出如下所示框,让输入文件名以及保存路径,该对话框已经是页面外的元素了,使用普通的定位时定不到了,所以就需要使用autoIT工具来实现。

实现第三步, *** 作如下:

①打开autoit工具包下的autoIT Window Info(x64)工具,版本按自己电脑系统来,界面如下所示:

1.1鼠标点中Finder Tool并拖动到输入文件名处, *** 作如下所示,得到下图结果

1.2重复上述定位步骤,定位保存按钮,结果如下图所示

②元素定位到了,接下来就是使用autoIT工具包下的SciTE Script Editor写脚本,并保存为au3格式,注意:此工具中;表注释

根据定位到的参数值,写如下脚本:

ControlFocus("另存为","","Edit1")WinWait("[CLASS:#32770]",10)ControlSetText("另存为","Edit1","G:801-python_codeDemoautoitaIDu.png")Sleep(2000)ControlClick("另存为","button2")

代码解释:

第一行:ControlFocus ( "Title","窗口文本",controlID) 设置输入焦点到指定窗口的某个控件上;

第二行:WinWait ( "Title",超时时间 ) 暂停脚本的执行直至指定窗口存在(出现) 为止;

第三行:;表注释

第四行:ControlSetText ( "Title",controlID,"新文本" ) 修改指定控件的文本;

第五行:Sleep ( 延迟 ) 使脚本暂停指定时间段;

第六行:ControlClick ( "Title",控件ID,按钮,点击次数 ) 向指定控件发送鼠标点击命令;

其中, Title即autoIt Window Info识别出的Title字段, controlID即autoItwindow Info识别出的Class和Instance的拼接, 如上图拼接后的结果应为:button2,也就是ClassnameNN的值。

③使用autoIT工具包下的ComplIE Script to .exe工具把刚编写的脚本编译成可执行文件, *** 作如下:

执行上步骤后,会出现test.exe可执行文件,如下:

第四步,到Python代码中调用该可执行文件, *** 作代码如下:

import osos.system(os.getcwd() + "\autoit\test.exe")

运行Python代码,在定义的路径下会看到已保存的百度图片,如下所示:

整体代码实现如下,仅供参考:

# Coding=utf-8from selenium import webdriver# 鼠标 *** 作需要导入ActionChains类,因为鼠标 *** 作的方法封装在该类中from selenium.webdriver.common.action_chains import ActionChainsimport timeimport osimport win32conimport win32APIdriver = webdriver.Chrome()driver.get("https://www.baIDu.com")driver.maximize_window()time.sleep(2)# 鼠标右击 *** 作,context_click()context = driver.find_element_by_CSS_selector(".index-logo-src")ActionChains(driver).context_click(context).perform()time.sleep(3)# 按下下键win32API.keybd_event(40,0)time.sleep(1)# 按下回车win32API.keybd_event(13,0)time.sleep(1)# 释放回车键win32API.keybd_event(13,0)time.sleep(1)# 释放下键win32API.keybd_event(40,0)time.sleep(1)os.system(os.getcwd() + "\autoit\test.exe")# 调用exe文件后,延时3秒time.sleep(3)driver.quit()

将百度首页中的图片另存为还有一个实现方法,不用win32API *** 作,直接在autoIT编写脚本中发送个V,因为选择另存为和按V是一样的作用,autoIT编写脚本代码如下:

send("v")Sleep(1000)ControlFocus("另存为","G:801-python_codeDemoautoitaIDu1.png")Sleep(2000)ControlClick("另存为","button2")

重复编译 *** 作,然后在Pyhton代码中实现如下,仅供参考:

# Coding=utf-8from selenium import webdriver# 鼠标 *** 作需要导入ActionChains类,因为鼠标 *** 作的方法封装在该类中from selenium.webdriver.common.action_chains import ActionChainsimport timeimport osimport win32conimport win32APIdriver = webdriver.Chrome()driver.get("https://www.baIDu.com")driver.maximize_window()time.sleep(2)# 鼠标右击 *** 作,context_click()context = driver.find_element_by_CSS_selector(".index-logo-src")ActionChains(driver).context_click(context).perform()time.sleep(3)os.system(os.getcwd() + "\autoit\test1.exe")time.sleep(3)driver.quit()

运行代码后,图片保存成功,如下:

如上就是完整的将网页图片另存为的 *** 作,上传/下载的 *** 作一样,把另存为学会,其他两类也就迎刃而解了。

总结:

在琢磨模拟键盘 *** 作时,有两个错误点,而导致编写的代码与脚本总是运行不成功,后面自己仔细查找原因,以及百度,终于是给解决了,所以故记录下,也好看看自己的进步过程。

问题一:

模拟按键 *** 作,之前没选对 *** 作方式,这是自己的Python基础薄弱,需要补充,后面找到win32API的方式,并找到键盘图,按键 *** 作就完美解决。

问题二:

编写autoit的脚本,定位后,controlID没有拼接,而是直接写的Edit,button,而导致代码调用脚本,但没执行 *** 作,controlID即autoItwindow Info识别出的Class和Instance的拼接, 如上图拼接后的结果应为:button2,也就是ClassnameNN的值。

问题三:

在调用exe文件成功并执行 *** 作后,还没点击保存按钮,浏览器就立马关闭了,后面一想,在调用exe文件后,加个延时就解决了,如果exe文件执行的内容多,延时需要长些,不然driver.quit()会很快关闭浏览器。

总结

以上是内存溢出为你收集整理的利用Python+Selenium+AutoIt模拟键盘 *** 作!表弟进的小网站很好看全部内容,希望文章能够帮你解决利用Python+Selenium+AutoIt模拟键盘 *** 作!表弟进的小网站很好看所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1208713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存