自动化之图形界面库pyautogui

2022-07-17 12:29:55 浏览数 (1)

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

pyautogui库的趣味操作

  • 一:初步认识pyautogui
  • 二:相关方法的介绍
    • 1:控制鼠标
      • 先了解一下像素(我们以笔记本电脑像素举例)
      • 实现对鼠标的控制
    • 2:控制输入以及键盘按键
    • 3:截图以及匹配(图片识别)
  • 三:自动化点赞(处理了存在的异常)、

一:初步认识pyautogui

pyautogui是什么?

拆开来分析,毕竟还是英文单词。py auto gui,那就是python的自动化图形界面的一个库。 给大家推荐一个可以查阅py文档的网站,可以查看最新的库的相关操作以及版本。点击访问PyPI

可以试着去阅读,虽然都是英文,但是也是可以通过谷歌翻译翻译为中文的(如果你真的看不懂的话),个人感觉学会阅读英文文献也是程序员的一种素养。 废话有点多,我们来介绍这个库究竟是什么?大家可以在这里看到。


实现一个控制图形界面的库,完成一些自动化操作,当然也是需要配合你得程序,或者高级一点我们可以说是配合你的算法。 可以实现鼠标控制,键盘输入,截图匹配的相关操作,目前本人学到用到的也就这些。

二:相关方法的介绍

1:控制鼠标

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

呃呃,刚刚去百度了一下。说的比较官方,但是比较准确。

像素是指由图像的小方格组成的,这些小方块都有一个明确的位置和被分配的色彩数值,小方格颜色和位置就决定该图像所呈现出来的样子。

按照我们的简单的理解,像素就是电脑屏幕上的那些很小很小的方格,每个方格都有位置坐标,以及色彩rgb,像素方格组合起来显示就可以呈现出来我们可以看到的图像。就好像你的表皮细胞一样,你是肉眼看不到,但是它是组成部分。不知道这样比喻是否恰当。

我们也会听到有关分辨率,那么像素于之是什么样的关系呢? 像素(px)=英寸(in)x分辨率(ppi) 我们需要知道一下这个概念。这是电脑显示器上的分辨率,分别代表了长和宽上的像素点。值比较大的化,图像会更加清晰,美观。

我们可以通过代码来获取屏幕的分辨率

代码语言:javascript复制
import pyautogui 导入所需要的库
print(pyautogui.size())#查看电脑横纵像素

分别打印出横纵如下,这是这个库可以用到的一个方法。具体了解到有什么用呢?继续往后看鼠标。

实现对鼠标的控制

1:打印鼠标的当前位置

代码语言:javascript复制
print(pyautogui.position())#查看鼠标所在的位置

我们可以做一个循环监测鼠标所在的位置

代码语言:javascript复制
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

代码语言:javascript复制
print(pyautogui.onScreen(200,202))#查看位置点是否位于屏幕上

2:控制鼠标移动

对的,还可以控制鼠标移动,我们来看具体的用到的方法。

代码语言:javascript复制
pyautogui.moveTo(100,200,3)#这是控制鼠标移动,3代表了时间。

还有一种移动的方法

代码语言:javascript复制
pyautogui.moveRel(200,300,4)

看起来两者区别不大,但是实际上还是有区别的,那就是moveTo()是移动到绝对位置,就是相对于你的屏幕坐标原点,而moveRel()是相对当前位置移动。


我们来看一种按键移动,就是指定按住鼠标那个键移动

代码语言:javascript复制
pyautogui.drag(500,500,button='left',duration=4)
#button参数指定了按键,duration指定了完成任务的时间,当然这个移动也是相对当前位置移动
代码语言:javascript复制
pyautogui.dragTo(500,500,button='left',duration=6)#这边的500是移动到具体的位置

鼠标点击

代码语言:javascript复制
pyautogui.click(0,0,button='right')#鼠标点击指定的位置
pyautogui.click(2,2,button='left',clicks=2,interval=0.1,duration=2)#interval代表完成间隔时间,clicks指定了点击次数。

鼠标滚动

代码语言:javascript复制
import pyautogui
#为了效果明显,我们使用一个循环进行观察
pyautogui.FAILSAFE = False
while True :
    pyautogui.scroll(-200)

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

代码语言:javascript复制
在鼠标光标的位置写入内容
pyautogui.write("Hello",interval=0.5)#间隔为1秒,字符之间

还有其它的按键方法,这边不做演示,展示一下方法

代码语言:javascript复制
# pyautogui.press('enter')#按键盘上的键
# # pyautogui.press(['x','y','z'])#以列表的形式传入按键
# pyautogui.keyDown()#模拟按键
# pyautogui.keyUp()#按键释放       

信息输入

代码语言:javascript复制
a = pyautogui.alert(Text = "i love you",title='666') #弹出提示框
print(a)#输出一下返回内容
代码语言:javascript复制
a1 = pyautogui.confirm("你喜欢谁",button = ['张三','王五','李四'])
print(a1)

信息输入还有密码的输入的方法

代码语言:javascript复制
# a2 = pyautogui.password("请输入密码")
# print(a2)

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

这边我们介绍方法,具体看后面的一个自动化程序

代码语言:javascript复制
#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动态,来看代码先

代码语言:javascript复制
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('没有找到目标,屏幕下滚~')

想说的是这个和你预先作为模板的图片有关,效果也是不一样的,还有自己如何选择和滚动,光标预先放置的位置。会有一部分没点上,自动化点赞了许多。

释疑

我们来解释一部分内容,就是这边我们为什么要捕获异常

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


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

0 人点赞