python在屏幕上点击特定按钮或图像效果实例

 更新时间:2022年09月26日 11:11:37   作者:zzfengling  
这篇文章主要给大家介绍了关于python在屏幕上点击特定按钮或图像效果的相关资料,文中通过实例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友可以参考下

想要的效果

大概就是搞个windows桌面自动点击程序,以新浪微博自动点赞为例。

需要用到的函数库

PyAutoGUI——图形用户界面自动化(主要用到这个)

PyAutoGUI是Python功能强大的UI自动化库,其目的是可以用程序自动控制鼠标和键盘操作,主要用来实现PC端的UI自动化。

  • 有鼠标控制、键盘操作、屏幕截图、图片定位、消息对话框、窗口操作等功能;
  • 有倒计时、鼠标坐标颜色抓取小程序、UI自动化迷你语言等实用工具;
  • 有故障安全、通用暂停等机制。 

Pillow——图像处理

该库提供广泛的文件格式支持、高效的内部表示和相当强大的图像处理功能。旨在快速访问以几种基本像素格式存储的数据。它应该为一般的图像处理工具提供坚实的基础。

  • 该库包含基本的图像处理功能,包括点操作、使用一组内置卷积内核进行过滤以及色彩空间转换。
  • 该库还支持图像大小调整、旋转和任意仿射变换。
  • 有一种直方图方法允许您从图像中提取一些统计信息。这可用于自动对比度增强和全局统计分析。

OpenCV——是开源的计算机视觉和机器学习库(不太了解,问题不大)

它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

前面的看不看都一样进入正题

例如实现功能,打开新浪微博首页,我们要识别图中的的赞,并点击。

1),使用pyautogui.mouseInfo()获取目标图片(屏幕上需要点击的图像)位置,以新浪微博点赞为例,写代码截取点赞的手势图片,代码如下:

import pyautogui
pyautogui.mouseInfo()#获取点赞图片的位置(1127,756,1146,775)

from PIL import Image
import pyautogui
import time
time.sleep(2)#留一点切换页面时间
im = pyautogui.screenshot()#截取整个屏幕
om = im.crop((1127, 756, 1146, 775))#根据截取的屏幕仅截取“带赞的手势图片”,用pyautogui.mouseInfo()获取图片的位置(1127,756,1146,775),这里截取区域用到了Pillow
om.save(r"C:\Users\zz\Desktop\dianzan.png")#将图片保存供pyautogui.locateOnScreen()使用
 

截图效果:

ps:自己手动截图也一样,还有最重要每当初次运行时要确保图像不出错还是重新用程序截一个图靠谱。

2),获取赞截图后使用pyautogui.locateOnScreen()识别图像获取赞图像的位置,再用pyautogui.center()获取中心点,代码如下:

import pyautogui
import time
 
time.sleep(1)
 
def zan():
    time.sleep(1)  # 这个可以用来防止操作过快
    left, top, width, height = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png")  # 寻找刚才保存点赞手势图片
    center = pyautogui.center((left, top, width, height))  # 寻找图片的中心
    pyautogui.click(center)
    print('点赞成功!')
 
count = 10    # 为了防止一直运行下去,点一定数量的赞就结束,自己定义
while count:
    try:
        zan()  # 调用点赞函数
        count -= 1
    except TypeError:           # 错误类型没有也文图不大,哈哈哈
        pyautogui.scroll(-500)  # 本页没有图片后,滚动鼠标;
        print('没有找到目标,屏幕下滚~')
print("点10个赞结束!")

 运行结果:

代码输出如下:

 一般基本原理以上就是了,大概。。。。但是要提高pyautogui.locateOnScreen()识别图像速度和效率的话看下面:

图片定位不稳定的四种解决方案

方案介绍

1.模糊定位:借助opencv的来提高识别率,加入confidence参数调整识别准确度,当confidence越小,定位的精度就会越低,从而实现模糊定位。

2.灰度匹配:加入grayscale参数,当grayscale=True时会使图像和屏幕截图中的颜色去饱和,解决由于显示器饱和度不同从而引起的颜色细微差异因而导致的图像定位失败问题。

3.指定范围:加入region参数,可以控制找图范围提高找图效率。

4.多图定位:图标在不同场景下可能有不同的显示效果,可以把不同显示效果的多张图片归为一个事件,对多张图进行循环查找,定位一张图就可以对整个事件进行定位。

 1.模糊定位

pyautogui.locateOnScreen()函数中加入confidence参数,当confidence的值决定精度,代码如下:

left, top, width, height = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png", confidence=0.9)
#太长了下面用xy表示

2.灰度匹配

pyautogui.locateOnScreen()函数中加入grayscale=True,就可以实现灰度匹配,代码如下:

xy = locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png", grayscale=True)

3.指定范围

加入region参数,可以控制找图范围,从而提高找图效率。region(x,y,width,height),其中x,y为范围左上角坐标,width,height为范围的宽和高,代码如下:

xy = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png",  region=(1128, 208, 1158, 1027))

4.多图定位

可以对一个图标截多张不同的图,每一张图都代表这个图标,只要定位其中一张图就能定位这个图标。对locateOnScreent()函数进行二次封装,多张图片之间用 ' | ' 间隔,实现循环找图,代码如下:

from pyautogui import *
 
#把字符串按'|'切割
def word_cut(args):
    tup = []
    if '|' in args:
        re1 = args.split('|')
        return re1
    else:
        tup.append(args)
        return tuple(tup)
 
#判断图像是否找到,如果找到就返回True,没找到就跳过
def assertPIC(args):
    if locateOnScreen(args) == None:
        pass
    else:
        return True
 
#循环找图,找到就返回图像中心点,没找到就打印'没找到'
def img_locat(args):
    arg = word_cut(args)
    for i in range(len(arg)):
        if assertPIC(arg[i]):
            return center(locateOnScreen(arg[i]))
        else:
            print('没找到')
 
#测试
print(img_locat('test1.png|test2.png'))

所以最后的程序可以这样:

import pyautogui
import time
 
time.sleep(1)
 
def zan():
    time.sleep(3)  # 这个可以用来防止操作过快
    left, top, width, height = pyautogui.locateOnScreen(r"C:\Users\zz\Desktop\dianzan.png",
                                                        confidence=0.9, region=(1101, 190, 1240, 1034))  # 寻找刚才保存点赞手势图片
    center = pyautogui.center((left, top, width, height))  # 寻找图片的中心
    pyautogui.click(center)
    print('点赞成功!')
 
count = 10  # 为了防止一直运行下去,点一定数量的赞就结束,自己定义
while count:
    try:
        zan()  # 调用点赞函数
        count -= 1
    except TypeError:           # 错误类型没有也文图不大,哈哈哈
        pyautogui.scroll(-500)  # 本页没有图片后,滚动鼠标;
        print('没有找到目标,屏幕下滚~')
 
print("点10个赞结束!")

补充:Python实现鼠标自动控制到屏幕指定位置,并点击

import pyautogui
pyautogui.moveTo(0, 0, duration=1)
pyautogui.click()

代码解释:

0, 0是鼠标需要移动到的位置,这边是屏幕左上角的位置坐标

duration=1是将鼠标移动到指定坐标的间隔时间,这边是1秒

pyautogui.click()是点击

注:

屏幕的位置坐标点可以通过微信截图看到坐标

总结

到此这篇关于python在屏幕上点击特定按钮或图像效果的文章就介绍到这了,更多相关python屏幕上点击按钮或图像内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python连接Redis库常见操作全面详解

    Python连接Redis库常见操作全面详解

    本文将介绍如何在Python中进行Redis操作,包括连接Redis、数据存储、数据检索和其他常见操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • GraphQL在Django中的使用教程

    GraphQL在Django中的使用教程

    这篇文章主要介绍了GraphQL在Django中的使用教程,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • 搭建Python的Django框架环境并建立和运行第一个App的教程

    搭建Python的Django框架环境并建立和运行第一个App的教程

    时至今日Django仍然是人气最高的Web开发框架,MVC结构清晰内置功能强大,这里我们就来共同学习搭建Python的Django框架环境并建立和运行第一个App的教程
    2016-07-07
  • Python中死锁的形成示例及死锁情况的防止

    Python中死锁的形成示例及死锁情况的防止

    由于Python中允许创建多个线程,那么互斥锁或者线程同时获取多个锁的情况就有可能发生,这里我们就来看一下Python中死锁的形成示例及死锁情况的防止:
    2016-06-06
  • python 爬虫出现403禁止访问错误详解

    python 爬虫出现403禁止访问错误详解

    这篇文章主要介绍了 python 爬虫解决403禁止访问错误的相关资料,需要的朋友可以参考下
    2017-03-03
  • python scrapy脚本报错问题及解决

    python scrapy脚本报错问题及解决

    这篇文章主要介绍了python scrapy脚本报错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python入门之模块与包

    Python入门之模块与包

    这篇文章主要为大家介绍了Python的模块与包,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • pygame实现简易飞机大战

    pygame实现简易飞机大战

    这篇文章主要为大家详细介绍了pygame实现简易飞机大战,python版飞机大战,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 详解Python 字符串相似性的几种度量方法

    详解Python 字符串相似性的几种度量方法

    这篇文章主要介绍了详解Python 字符串相似性的几种度量方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 详解在python操作数据库中游标的使用方法

    详解在python操作数据库中游标的使用方法

    这篇文章主要介绍了在python操作数据库中游标的使用方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11

最新评论