热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

自动化之图形界面库pyautogui

开篇言:py的库真的是多,封装相关功能的库真的是各具神通,里面的轮子很多。前几天一直回去看基础


开篇言:py的库真的是多,封装相关功能的库真的是各具神通,里面的轮子很多。前几天一直回去看基础的语法函数这些,以及c语言数据结构这些,扎实自己的基础。
学习是一件很麻烦但是很有意思的事情(我指的是码代码),今天为大家介绍这个自动化库,提高趣味性,当然python的自动化操作还是有好多,后面会为大家继续推出。


pyautogui库的趣味操作



  • 一:初步认识pyautogui

  • 二:相关方法的介绍



    • 1:控制鼠标



      • 先了解一下像素(我们以笔记本电脑像素举例)

      • 实现对鼠标的控制



    • 2:控制输入以及键盘按键

    • 3:截图以及匹配(图片识别)



  • 三:自动化点赞(处理了存在的异常)、


一:初步认识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吹也是有道理的,人工智能没数据可视化这些,数据分析等等。不得不说,这门语言很优秀。



欢迎大家留言,写文章太累了。还有后面如果有新的内容的话,还会给本文加入更多自动话程序。

点击访问主页-jgdabc



推荐阅读
  • 本文由编程笔记#小编整理,主要介绍了关于数论相关的知识,包括数论的算法和百度百科的链接。文章还介绍了欧几里得算法、辗转相除法、gcd、lcm和扩展欧几里得算法的使用方法。此外,文章还提到了数论在求解不定方程、模线性方程和乘法逆元方面的应用。摘要长度:184字。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 本文讨论了同事工资打听的话题,包括同工不同酬现象、打探工资的途径、为什么打听别人的工资、职业的本质、商业价值与工资的关系,以及如何面对同事工资比自己高的情况和凸显自己的商业价值。故事中的阿巧发现同事的工资比自己高后感到不满,通过与老公、闺蜜交流和搜索相关关键词来寻求解决办法。 ... [详细]
  • “你永远都不知道明天和‘公司的意外’哪个先来。”疫情期间,这是我们最战战兢兢的心情。但是显然,有些人体会不了。这份行业数据,让笔者“柠檬” ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了游戏开发中的人工智能技术,包括定性行为和非定性行为的分类。定性行为是指特定且可预测的行为,而非定性行为则具有一定程度的不确定性。其中,追逐算法是定性行为的具体实例。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 本文介绍了如何使用vue-awesome-swiper组件,包括在main.js中引入和使用swiper和swiperSlide组件,以及设置options和ref属性。同时还介绍了如何在模板中使用swiper和swiperSlide组件,并展示了如何通过循环渲染swipes数组中的数据,并使用picUrl属性显示图片。最后还介绍了如何添加分页器。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
author-avatar
PHP_小楚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有