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

目录
  • 想要的效果
  • 需要用到的函数库
    • PyAutoGUI——图形用户界面自动化(主要用到这个)
    • Pillow——图像处理
    • OpenCV——是开源的计算机视觉和机器学习库(不太了解,问题不大)
  • 前面的看不看都一样进入正题
  • 图片定位不稳定的四种解决方案
    • 方案介绍
    • 1.模糊定位
    • 2.灰度匹配
    • 3.指定范围
    • 4.多图定位
  • 补充: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屏幕上点击按钮或图像内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python模拟点击网页按钮实现方法

    python怎么模拟点击网页按钮 前提环境: Python3 和 Visual Studio Code安装完毕 安装selenium : 在终端输入: pip install selenium, 如图 下载chromedriver : 登录http://chromedriver.storage.googleapis.com/index.html下载 (与浏览器对应版本请上网查阅) 下载后将chromedriver.exe文件放至 python.exe所在目录 如: D:\Program File

  • python基于tkinter点击按钮实现图片的切换

    tkinter是python的标准Tk GUI工具包的接口,在windows下如果你安装的python3,那在安装python的时候,就已经自动安装了tkinter了 如果是在linux系统中,则不会自动安装tkinter,需要通过 sudo apt-get install python-tk 手动安装 首先先介绍一下,tkinter本身只支持gif等少数几个图片格式,如果图片并不复杂,建议直接右击图片,进入编辑,在画图界面将图片另存为gif格式就可以使用了(连png和jpeg都不支持...真的

  • python实现点击按钮修改数据的方法

    使用JSON获取前端数据,转成JSON,传递到后端,然后对数据库做修改. 前端代码 <div style="padding: 10px;"> <button class="king-btn-demo king-btn king-success" id="update_id">UPDATE</button> ID : <input id = "id_up" type="text

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

    目录 想要的效果 需要用到的函数库 PyAutoGUI——图形用户界面自动化(主要用到这个) Pillow——图像处理 OpenCV——是开源的计算机视觉和机器学习库(不太了解,问题不大) 前面的看不看都一样进入正题 图片定位不稳定的四种解决方案 方案介绍 1.模糊定位 2.灰度匹配 3.指定范围 4.多图定位 补充:Python实现鼠标自动控制到屏幕指定位置,并点击 总结 想要的效果 大概就是搞个windows桌面自动点击程序,以新浪微博自动点赞为例. 需要用到的函数库 PyAutoGUI——

  • python 在屏幕上逐字显示一行字的实例

    如下所示: #-*- coding: utf-8 -*- #code:myhaspl@qq.com #12-1.py import sys reload(sys) sys.setdefaultencoding("gbk") import sys,time def print_one_by_one(text):     sys.stdout.write("\r " + " " * 60 + "\r") # /r 光标回到行首  

  • Python实现鼠标自动在屏幕上随机移动功能

    本来想控制鼠标自动移动防止公司电脑自动休眠的策略,然而,实现了并没什么卵用,还是会休眠.但还是分享出来吧.win10的系统. 首先要安装几个第三方的包:pymouse.pyhook.pywin32.pyuserinput.别看代码里值引用pymouse和win32api,如果不把这些都装了,运行时就会报错. 下面来看下代码吧. from pymouse import PyMouse from win32api import GetSystemMetrics import random impor

  • iOS开发之使用Storyboard预览UI在不同屏幕上的运行效果

    在公司做项目一直使用Storyboard,虽然有时会遇到团队合作的Storyboard冲突问题,但是对于Storyboard开发效率之高还是比较划算的.在之前的博客中也提到过,团队合作使用Storyboard时,避免冲突有效的解决方法是负责UI开发的同事最好每人维护一个Storyboard, 公用的组件使用轻量级的xib或者纯代码来实现.这样不但提高了开发效率,而且可以有效的避免Storyboard的冲突.如果每个人维护一个Storyboard, 遇到冲突了就以你自己的为准就OK了. 言归正传,

  • Python selenium文件上传方法汇总

    文件上传是所有UI自动化测试都要面对的一个头疼问题,今天博主在这里给大家分享下自己处理文件上传的经验,希望能够帮助到广大被文件上传坑住的seleniumer. 首先,我们要区分出上传按钮的种类,大体上可以分为两种,一种是input框,另外一种就比较复杂,通过js.flash等实现,标签非input 我们分别对这两种进行分析: 1.input标签 众所周知,input标签是可以直接send_keys的,这里也不例外,来看代码示例: 示例网址:http://www.sahitest.com/demo

  • Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)

    一.准备工作: 安装pywin32,后面开发需要pywin32的支持,否则无法完成与windows层面相关的操作. pywin32的具体安装及注意事项: 1.整体开发环境: 基于windows7操作系统; 提前安装python(因为篇幅问题,在此不详细讲解python环境的安装,大家可以自备楼梯): 大家可以在cmd中测试下python环境是否安装好: 大家可以看到我电脑上已经安装好了Python,并显示版本与是V 3.6.2. 注:自己电脑上的Python版本号一定要知道,后面安装pywin3

  • 如何使用python实现模拟鼠标点击

    这篇文章主要介绍了如何使用python实现模拟鼠标点击,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 不知道大家在工作中有没有一些工作需要重复的点击鼠标,因为会影响到财务统计报表的关系,我们每个月底月初都要修改ERP中的单据日期,单据多的时候光修改就能让你点鼠标点到手麻.(这里要吐槽一下浪沙软件,别的单据都可以批量修改日期,就是这个移仓单不行,你们研发怎么就这么懒?剩下这么点工作就不完成他?)之前同事有跟我提到过键盘精灵,因为当时负责别的工作,

  • python+Selenium自动化测试——输入,点击操作

    这是我的第一个真正意思上的自动化脚本. 1.练习的测试用例为: 打开百度首页,搜索"胡歌",然后检索列表,有无"胡歌的新浪微博"这个链接 2.在写脚本之前,需要明确测试的步骤,具体到每个步骤需要做什么,既拆分测试场景,考虑好之后,再去写脚本. 此测试场景拆分如下: 1)启动Chrome浏览器 2)打开百度首页,https://www.baidu.com 3)定位搜索输入框,输入框元素XPath表达式://*[@id="kw"] 4)定位搜索提交按

  • python中用ctypes模拟点击的实例讲解

    在小编学习python中的模拟点击之前,我们想要对某一项操作进行自动指令的重复,可以选择大家熟知的按键精灵.那么对比python的模拟点击,小编还是觉得python中使用更加方便.这样说不能让有些小伙伴信服,下面小编就以一个以小游戏为例,在我们写完ctypes模拟点击后用python运行,看看游戏体验效果. 按键精灵提供的窗口api性能并不算的上太好.但是将整个逻辑搬到python上,并提供了自己所写的api后,速度有了很大的提升. 直接用python调用,获取特定点位置上的颜色,非白色就发送点

随机推荐