想要的效果

大概就是搞个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屏幕上点击按钮或图像内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

python在屏幕上点击特定按钮或图像效果实例的更多相关文章

  1. XCode 3.2 Ruby和Python模板

    在xcode3.2下,我的ObjectiveCPython/Ruby项目仍然可以打开更新和编译,但是你无法创建新项目.鉴于xcode3.2中缺少ruby和python的所有痕迹(即创建项目并添加新的ruby/python文件),是否有一种简单的方法可以再次安装模板?我发现了一些关于将它们复制到某个文件夹的信息,但我似乎无法让它工作,我怀疑文件夹的位置已经改变为3.2.解决方法3.2中的应用程序模板

  2. Swift基本使用-函数和闭包(三)

    声明函数和其他脚本语言有相似的地方,比较明显的地方是声明函数的关键字swift也出现了Python中的组元,可以通过一个组元返回多个值。传递可变参数,函数以数组的形式获取参数swift中函数可以嵌套,被嵌套的函数可以访问外部函数的变量。可以通过函数的潜逃来重构过长或者太复杂的函数。

  3. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  4. Swift、Go、Julia与R能否挑战 Python 的王者地位

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 红薯因 Swift 重写开源中国失败,貌似欲改用 Python

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  6. 你没看错:Swift可以直接调用Python函数库

    上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。以如下python脚本为例:Perfect-Python可以用下列方法封装并调用以上函数,您所需要注意的仅仅是其函数名称以及参数。

  7. Swift中的列表解析

    在Swift中完成这个的最简单的方法是什么?我在寻找类似的东西:从Swift2.x开始,有一些与你的Python样式列表解析相当的东西。(在这个意义上,它更像是Python的xrange。如果你想保持集合懒惰一路通过,只是这样说:与Python中的列表解析语法不同,Swift中的这些操作遵循与其他操作相同的语法。

  8. swift抛出终端的python错误

    每当我尝试启动与python相关的swift时,我都会收到错误.我该如何解决?

  9. 在Android上用Java嵌入Python

    解决方法看看this,它适用于J2SE,你可以尝试在Android上运行.

  10. 在android studio中使用python代码构建android应用程序

    我有一些python代码和它的机器人,我正在寻找一种方法来使用android项目中的那些python代码.有没有办法做到这一点!?解决方法有两种主要工具可供使用,它们彼此不同:>QPython>Kivy使用Kivy,大致相同的代码也可以部署到IOS.

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部