热门标签 | 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



推荐阅读
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 本文详细解析了如何使用Python语言在STM32硬件平台上实现高效的编程和快速的应用开发。通过具体的代码示例,展示了Python简洁而强大的特性。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 装饰器是一种用于在不修改原函数代码的情况下,动态地添加功能的工具。它允许你在函数执行前后插入额外的逻辑,从而增强或改变函数的行为。 ... [详细]
  • 本文介绍了几种不同的编程方法来计算从1到n的自然数之和,包括循环、递归、面向对象以及模板元编程等技术。每种方法都有其特点和适用场景。 ... [详细]
  • 微软Exchange服务器遭遇2022年版“千年虫”漏洞
    微软Exchange服务器在新年伊始遭遇了一个类似于‘千年虫’的日期处理漏洞,导致邮件传输受阻。该问题主要影响配置了FIP-FS恶意软件引擎的Exchange 2016和2019版本。 ... [详细]
  • Python入门:第一天准备与安装
    本文详细介绍了Python编程语言的基础知识和安装步骤,帮助初学者快速上手。涵盖Python的特点、应用场景以及Windows环境下Python和PyCharm的安装方法。 ... [详细]
  • 本文探讨了如何在日常工作中通过优化效率和深入研究核心技术,将技术和知识转化为实际收益。文章结合个人经验,分享了提高工作效率、掌握高价值技能以及选择合适工作环境的方法,帮助读者更好地实现技术变现。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • C语言标准及其GCC编译器版本
    编程语言的发展离不开持续的维护和更新。本文将探讨C语言的标准演变以及GCC编译器如何支持这些标准,确保其与时俱进,满足现代开发需求。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • Python 学习是否需要先掌握 C 语言?
    Python 是一门非常适合编程入门的语言,很多人疑惑是否需要先学习 C 语言才能更好地掌握 Python。本文将详细探讨这个问题,并为初学者提供专业的建议。 ... [详细]
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社区 版权所有