当前位置:网站首页>自动化之图形界面库pyautogui
自动化之图形界面库pyautogui
2022-07-17 12:34:00 【兰舟千帆】
开篇言:py的库真的是多,封装相关功能的库真的是各具神通,里面的轮子很多。前几天一直回去看基础的语法函数这些,以及c语言数据结构这些,扎实自己的基础。 学习是一件很麻烦但是很有意思的事情(我指的是码代码),今天为大家介绍这个自动化库,提高趣味性,当然python的自动化操作还是有好多,后面会为大家继续推出。
pyautogui库的趣味操作
一:初步认识pyautogui
pyautogui是什么?
拆开来分析,毕竟还是英文单词。py+auto+gui,那就是python的自动化图形界面的一个库。 给大家推荐一个可以查阅py文档的网站,可以查看最新的库的相关操作以及版本。点击访问PyPI
可以试着去阅读,虽然都是英文,但是也是可以通过谷歌翻译翻译为中文的(如果你真的看不懂的话),个人感觉学会阅读英文文献也是程序员的一种素养。 废话有点多,我们来介绍这个库究竟是什么?大家可以在这里看到。
实现一个控制图形界面的库,完成一些自动化操作,当然也是需要配合你得程序,或者高级一点我们可以说是配合你的算法。 可以实现鼠标控制,键盘输入,截图匹配的相关操作,目前本人学到用到的也就这些。
二:相关方法的介绍
1:控制鼠标
先了解一下像素(我们以笔记本电脑像素举例)
呃呃,刚刚去百度了一下。说的比较官方,但是比较准确。
像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。
按照我们的简单的理解,像素就是电脑屏幕上的那些很小很小的方格,每个方格都有位置坐标,以及色彩rgb,像素方格组合起来显示就可以呈现出来我们可以看到的图像。就好像你的表皮细胞一样,你是肉眼看不到,但是它是组成部分。不知道这样比喻是否恰当。
我们也会听到有关分辨率,那么像素于之是什么样的关系呢? 像素(px)=英寸(in)x分辨率(ppi) 我们需要知道一下这个概念。这是电脑显示器上的分辨率,分别代表了长和宽上的像素点。值比较大的化,图像会更加清晰,美观。
我们可以通过代码来获取屏幕的分辨率
import pyautogui 导入所需要的库
print(pyautogui.size())#查看电脑横纵像素分别打印出横纵如下,这是这个库可以用到的一个方法。具体了解到有什么用呢?继续往后看鼠标。
实现对鼠标的控制
1:打印鼠标的当前位置
print(pyautogui.position())#查看鼠标所在的位置我们可以做一个循环监测鼠标所在的位置
import pyautogui
import time
def search_positon() :
time.sleep(1)
x1,y1= pyautogui.position()
print("您当前位置坐标为:","x:"+str(x1)+'',"y:"+str(y1))
if __name__ == "__main__" :
while True :
search_positon()
pass我们刚刚说到像素,通过一行代码获取到显示屏的横纵像素,这个对于我们对电脑的像素坐标有了一个基本的认识。可以知道的是,x_max=1919,y_max=1079,这就是程序给出的最大坐标。因为下标从0开始,我的电脑屏幕左上角的坐标为(0,0),而电脑的的横纵分别为1920,1080。所以就理解了。那么就可以在电脑的左上角建立坐标原点,然后可以开始你的平面构思。
我们可以用到一个方法,将该方法的返回直接打印出,如果在,就返回True,如果不在就返回False
print(pyautogui.onScreen(200,202))#查看位置点是否位于屏幕上2:控制鼠标移动
对的,还可以控制鼠标移动,我们来看具体的用到的方法。
pyautogui.moveTo(100,200,3)#这是控制鼠标移动,3代表了时间。还有一种移动的方法
pyautogui.moveRel(200,300,4)看起来两者区别不大,但是实际上还是有区别的,那就是moveTo()是移动到绝对位置,就是相对于你的屏幕坐标原点,而moveRel()是相对当前位置移动。
我们来看一种按键移动,就是指定按住鼠标那个键移动
pyautogui.drag(500,500,button='left',duration=4)
#button参数指定了按键,duration指定了完成任务的时间,当然这个移动也是相对当前位置移动pyautogui.dragTo(500,500,button='left',duration=6)#这边的500是移动到具体的位置鼠标点击
pyautogui.click(0,0,button='right')#鼠标点击指定的位置
pyautogui.click(2,2,button='left',clicks=2,interval=0.1,duration=2)#interval代表完成间隔时间,clicks指定了点击次数。鼠标滚动
import pyautogui
#为了效果明显,我们使用一个循环进行观察
pyautogui.FAILSAFE = False
while True :
pyautogui.scroll(-200)2:控制输入以及键盘按键
在鼠标光标的位置写入内容
pyautogui.write("Hello",interval=0.5)#间隔为1秒,字符之间还有其它的按键方法,这边不做演示,展示一下方法
# pyautogui.press('enter')#按键盘上的键
# # pyautogui.press(['x','y','z'])#以列表的形式传入按键
# pyautogui.keyDown()#模拟按键
# pyautogui.keyUp()#按键释放 信息输入
a = pyautogui.alert(Text = "i love you",title='666') #弹出提示框
print(a)#输出一下返回内容a1 = pyautogui.confirm("你喜欢谁",button = ['张三','王五','李四'])
print(a1)信息输入还有密码的输入的方法
# a2 = pyautogui.password("请输入密码")
# print(a2)3:截图以及匹配(图片识别)
这边我们介绍方法,具体看后面的一个自动化程序
#pyautogui.screenshot()#截图
#pyautogui.screenshot("picture.png")保存
#另一种保存
#a = pyautogui.screenhot()
#a.save("picture.png")#这边可以自己加路径的
#pyautogui.screenshot(region=(0,0, 0, 0))#这边指定区域截图
#匹配图片的函数
# pyautogui.locateOnScreen('picture.jpg')
# pyautogui.locateAllOnScreen('picture.jpg')#匹配多处图片具体完成一个小小的自动化点赞程序,网上也有好多,但是个人对异常进行了处理,所以点赞会比较丝滑。往下看,举个栗子。
三:自动化点赞(处理了存在的异常)、
思路:? 如何实现自动化点赞?我的思路是这样的,预先保存一个赞的图标。这个截图是我自己用windows自带截图功能截下来的, 如果你要用程序截图的化,会很麻烦,因为我需要的赞表就这么大。如下。hhh。
然后呢,我通过这个图片作为模板,然后再页面上寻找。一旦找到,我就返回其横纵坐标,然后我就指定点击这个位置。如果没有找到,我就命令鼠标下滑,继续找,如此循环。当然你可以看到,上面那个白色的赞标,这就决定了,我会给没有赞的人点赞,或者我没有点过赞的人。
我寻找的目标是csdn动态,来看代码先
import pyautogui
import time
pyautogui.FAILSAFE =False
def dianzan():
time.sleep(0.5) # 等待 0.5 秒
try:
buttonx,buttony = pyautogui.locateCenterOnScreen(image = 'D:/python/pydoc/pystudy/665.png') # 寻找 点赞图片;
pyautogui.click(buttonx,buttony)
# 点击
print('点赞成功!')
except TypeError :
print("目前接收不了返回的参数")
while True:
if pyautogui.locateOnScreen(image = 'D:/python/pydoc/pystudy/665.png'):
dianzan() # 调用点赞函数
else:
pyautogui.scroll(-200) # 本页没有图片后,滚动鼠标;
print('没有找到目标,屏幕下滚~')想说的是这个和你预先作为模板的图片有关,效果也是不一样的,还有自己如何选择和滚动,光标预先放置的位置。会有一部分没点上,自动化点赞了许多。
释疑
我们来解释一部分内容,就是这边我们为什么要捕获异常
try:
buttonx,buttony = pyautogui.locateCenterOnScreen(image = 'D:/python/pydoc/pystudy/665.png') # 寻找 点赞图片;
pyautogui.click(buttonx,buttony)
# 点击
print('点赞成功!')
except TypeError :
print("目前接收不了返回的参数") buttonx,buttony会接收返回的坐标,横纵,前提是如果找到了,但是没有找到会返回none,那么你要用两个参数接收的化就肯定不行了,所以我们考虑到这点,让程序在遇到这种情况的时候抛出异常,然后继续寻找,不然的化,程序会因为没找到图片返回值接收出错而中断。所以这个是一个很巧妙的点。
脚注:对个人用这些方法的话,其实没有太多的技术含量,python这些要求我们会这些方法,调包这些,所以个人一向将python作为辅助工具,当然你要是人工智能这些高级的话就会用到数学这些算法相关的。python呢,是一门很值得去学习的语言,效率高,数据分析强,集成大量的功能,大家给python吹也是有道理的,人工智能没数据可视化这些,数据分析等等。不得不说,这门语言很优秀。
欢迎大家留言,写文章太累了。还有后面如果有新的内容的话,还会给本文加入更多自动话程序。
边栏推荐
猜你喜欢
随机推荐
快速判断站点是否存活的 3 种编程实现
Stream流
2022 windows penetration test of "Cyberspace Security" of Hunan secondary vocational group (ultra detailed)
Convert excel table to word table, and keep the formula in Excel table unchanged
R language uses the KAP function of epidisplay package to calculate the proportion of calculation consistency of paired contingency tables and the value of kappa statistics, and uses xtabs function to
【Makefile】关于makefile使用上的一些备忘
Bazel use tutorial to
HCIA OSPF
JMeter中如何实现接口之间的关联?
什么是pytest,自动化测试必学
ty_gr551x 代码框架
Figure an introduction to the interpretable method of neural network and a code example of gnnexplainer interpreting prediction
如何在双链笔记软件中建立仪表盘和知识库?以嵌入式小组件库 NotionPet 为例
架构实战营|模块7
机械臂速成小指南(零点五):机械臂相关资源
完全背包问题代码模板
Feature level fusion in Bev space
Distinction between private key and public key -- Explanation of private key and public key
发送阻塞,接收阻塞
[sort] merge sort









