当前位置:首页 » 《随便一记》 » 正文

听说你想学最近火爆的自动化Python办公——pyautogui控制鼠标键盘自动化操作,pytesseract进行图片文字识别,搭配上os文件管理,re正则过滤简直爽爆了_大白小浪的博客

13 人参与  2022年04月10日 10:01  分类 : 《随便一记》  评论

点击全文阅读


听说你想学最近火爆的自动化Python办公——pyautogui控制鼠标键盘自动化操作,pytesseract进行图片文字识别,搭配上os文件管理,re正则过滤简直爽爆了

  • 前言
  • 准备条件
  • 扩展与提升
    • 收集群里图片用pyautogui库
    • 重命名收集好的图片
      • 细节一:pytesseract的下载与安装
        • 安装
        • 配置环境变量
        • 验证是否安装成功
      • 细节二:pytesseract中文字体包的导入

前言

最近在小破站上突然火爆了一个Python自动化办公的视频,地址如下:5分钟,教你做个自动化软件拿来办公、刷副本、回微信 | 源码公开,开箱即用在这里插入图片描述
但是虽说源码公开,但是也并非是完全开箱即用,对于那些基础不太行的同志来说确实有亿点点难…

因此,本小主特意为同志们准备了这一篇,想要学最近火爆的自动化Python办公,看这一篇就行!

准备条件

  • Python环境

首先,既然说好了是Python自动化办公,首当其冲的肯定就是Python了,这里我就不做赘述,Python环境配置不难,网上一大堆,但是还是推荐大家下一个pycharm,毕竟专业的工具用做专业的事情嘛。

  • pyautogui库

接下来介绍一个Python自动化办公的关键库——pyautogui,其主要是控制鼠标键盘使用的模块。它的下载方法也很简单,可以通过pip下载,关于具体的下载方式你也可以直接搜索其他资料,这里不做过多赘述。简单来给大家讲几个pyautogui库最常用的功能:

'''
    获取基本信息
'''
import pyautogui
# # 屏幕大小
size = pyautogui.size()
print(size)
# 鼠标位置
mouse_pos = pyautogui.position()
print(mouse_pos)
# 判断点是否在屏幕内
print(pyautogui.onScreen(100,100))
'''
    控制鼠标移动
'''
import pyautogui
size = pyautogui.size()
# 把鼠标移动到(10,10)的位置,周期duration为1秒
pyautogui.moveTo(10,10,duration=1)
# 把鼠标移动到画面中央,周期duration为0.5秒
pyautogui.moveTo(size.width/2,size.height/2,duration=0.5)
# 鼠标相对移动,周期duration为1秒
pyautogui.moveRel(100, 0,duration=1)
'''
    鼠标的移动
'''
import pyautogui
# 上一次的位置
last_pos = pyautogui.position()
try:
    while True:
        # 新位置
        new_pos = pyautogui.position()
        if last_pos != new_pos:
            print(new_pos)
            last_pos = new_pos
except KeyboardInterrupt:
    print('\nExit.')
'''
    鼠标的移动加点击
'''
import time			# 这个是系统时间库
import pyautogui
# 系统准备时间,停止1秒
time.sleep(1)

# 取得帮助菜单的位置
Project_pos = pyautogui.locateOnScreen('Project.png')
goto_Project = pyautogui.center(Project_pos)
# 移动鼠标
pyautogui.moveTo(goto_Project,duration=1)
# 点击
pyautogui.click()
# 再移动鼠标到返回图标并点击
break_pos = pyautogui.locateOnScreen('break.png')
goto_break = pyautogui.center(break_pos)
# 移动鼠标
pyautogui.moveTo(goto_break,duration=1)
pyautogui.click()
'''
    键盘输入
    这里会碰到一个输入不了中文的问题,可参考如下解决办法:
    导入pyperclip库,如果没有可以用: pip install pyperclip 安装
    作用:向剪切板发送文本或读取剪切板文本
    用法:
        pyperclip.copy('dsd')#向剪切板发送文本
        pyperclip.paste()读取剪切板文本
    再用pyautogui.hotkey('ctrl','v')粘贴
'''
import time
import pyautogui
import pyperclip
# 系统准备时间,停止1秒
time.sleep(1)

# 点击一次编辑器Python!
pyautogui.click(button="left")
# 输入【Python牛逼!】
pyautogui.typewrite("I like Python!")
# 输入回车,然后进行输入内容
pyautogui.typewrite('\nI like you.',0.25)
# 输入【good】,然后将头文字改为大写的G,最后在行尾写个句子
pyautogui.typewrite(['enter','g','o','o','d','left','left','left','backspace','G','end','.'],0.25)

# 输入中文,利用pyperclip.copy('你好,Python')#向剪切板发送文本,再用pyautogui.hotkey('ctrl','v')粘贴到文本里
pyperclip.copy('你好,Python')
pyautogui.hotkey('ctrl','v')
'''
    组合键的使用
'''
time.sleep(2)
# 每个动作间隔0.5秒钟
pyautogui.PAUSE = 0.5
# pyautogui.FAILSPAFE = True  # 启用自动防故障功能,左上角的坐标为(0,0),将鼠标移到屏幕的左上角,来抛出failSafeException异常
# 记事本打出时间(这里要注意是记事本,如果是Word的话f5就是查找和替换)
pyautogui.press('f5')
# 打入三行内容
pyautogui.typewrite('\nhelo')
pyautogui.typewrite('\nhelo')
pyautogui.typewrite('\nhelo')

# 按下Ctrl键(注意:keyDown是按下不松开,再用keyUp松开,而press就是按一下)
pyautogui.keyDown('ctrl')
# 按下a键,选择全部
pyautogui.press('a')
# 按下c键,复制
pyautogui.press('c')
# 松开Ctrl键
pyautogui.keyUp('ctrl')
# 鼠标点击记事本下方
pyautogui.click(600,600)
# 输入两个空行
pyautogui.typewrite('\n\n')
# 粘贴
pyautogui.hotkey('ctrl','v')

最后,以上只是pyautogui的最常用的最基础的功能,更多详细的请见官方API文档。

扩展与提升

最近接了个兄弟的小活,我兄弟是团支书,每个星期都要收团活动的截图,简单来说就是把群里每个人的截图保存下来,再重名名,统计数量,这种简单而繁琐的工作让他叫苦不堪,因此我给他写了个Python自动化脚本。

收集群里图片用pyautogui库

收集群里图片这个简单,可以用pyautogui对鼠标键盘的常用操作,直接给他来一波拟人化操作,详细看代码:

# -*-coding:utf-8-*-
"""
作者:白浪
日期:2021年11月25日
(这里的代码仅供参考,不适用于其他人)
"""
import pyautogui    # 自动化操作库
import time         # 系统时间库

# 弹窗
def auto_alert():
    # 显示一个简单的带文字和OK按钮的消息弹窗。用户点击后返回button的文字。
    # pyautogui.alert(text='', title='', button='OK')
    b = pyautogui.alert(text='您确定您要开始超级无敌自动化牛逼到爆的程序了么?', title='超级无敌自动化程序', button='确定!冲冲冲')
    print(b)  # 输出结果为OK

def goto_img(img):
    # 取得找到的第一张图片的位置
    # img_pos = pyautogui.locateOnScreen(img,confidence=0.8)
    # print(img_pos)
    # 取得多个图片的位置
    img_pos_list = list(pyautogui.locateAllOnScreen(img, confidence=0.8,grayscale=True))
    print(img_pos_list)
    # 移动鼠标到图片位置
    to_img = pyautogui.center(img_pos_list[0])
    pyautogui.moveTo(to_img,duration=0)

# 步骤一:收取图片
def Step1_GetImg():
    print('开始收取图片')
    # 系统等待5秒,这段时间你得打开你要收取图片的区域
    # time.sleep(5)
    # 来到班级群
    try:
        goto_img('class.png')
        pyautogui.click()
    except:
        goto_img('class2.png')
    time.sleep(1)
    while 1:
        # 移动鼠标到截图区域
        try:
            goto_img('jietuweizhi.png')
        except:
            try:
                goto_img('jietuweizhi2.png')
            except:
                continue
        # 按下鼠标右键
        pyautogui.mouseDown(button='right')
        pyautogui.mouseUp(button='right')

        # 另存为截图
        goto_img('save.png')
        # 点击
        pyautogui.click()
        try:
            goto_img('save2.png')
        except:
            goto_img('save3.png')
        # 点击
        pyautogui.click()
        # 移动鼠标到截图区域
        try:
            goto_img('jietuweizhi.png')
        except:
            try:
                goto_img('jietuweizhi2.png')
            except:
                continue
        pyautogui.scroll(-20)  # 向下滚动10格
        pyautogui.scroll(-20)  # 向下滚动10格

# 步骤二:给图片重命名
def Step2_rename():
    print('开始给图片重命名')

if __name__ == '__main__':
    # 弹窗
    auto_alert()
    # 步骤一:收取图片
    Step1_GetImg()
    # 步骤二:给图片重命名
    Step2_rename()
    

关于我上面为什么用try,except异常抛出,主要原因还是在于pyautogui.locateOnScreen(img)精度太高,有时间找不到图片,改为pyautogui.locateOnScreen(img,confidence=0.8)后,confidence是精度参数,范围在0~1间,精度越大肯定越精确,精度太小就容易识别到其他的错误图片上去了,达不到想要的效果。所以用异常抛出

重命名收集好的图片

收集好图片后如何重命名图片文件?这是一个很好的question!
这里我采用的是如下方法:

  1. 先用文件管理库——os,获取收集好的图片;
  2. 再用图片识别文字库——pytesseract,识别位置图片文字;
  3. 这里识别的文字可能还包含其他你不想要的文字信息,所以我们用正则库——re,正则化提取出我们想要的文字信息;
  4. 最后再用文件管理库——os,对位置图片重命名;

方法是这么个方法,但是实施过程中还是有很多需要注意的细节点,其中主要还是下载和安装配置方面,这里为了大家方便,我把下载链接和搭配好中文字体包的压缩包都放置这里,大家自行提取:pytesseract和中文字体识别包.zip

细节一:pytesseract的下载与安装

安装

安装过程中直接下一步就好,不过前往要记得自己的安装目录(博主的安装路径为:C:\Program Files(x86)\Tesseract-OCR),等会配置环境变量要用。

配置环境变量

博主的安装路径为:C:\Program Files(x86)\Tesseract-OCR。电脑属性–高级系统设置–环境变量,进入如下界面。
在这里插入图片描述
把刚刚的安装路径"C:\Program Files(x86)\Tesseract-OCR"添加到用户变量和系统变量的path中

验证是否安装成功

打开命令终端,输入:tesseract -v,可以看到版本信息。如果没有安装成功,可以重启电脑,或者再参考其他教程
在这里插入图片描述

细节二:pytesseract中文字体包的导入

如果不是做英文的图文识别,还需要下载其他语言的识别包(详细见上方下载链接),如简体字识别包对应的是chi_sim.traineddata ,繁体字识别包对应的是chi_tra.traineddata 。

下载好之后放到安装目录的tessdata目录下即可。
在这里插入图片描述
最后本着开源的精神,我也把图片文字识别的代码奉上,大家自行参考:

# -*-coding:utf-8-*-
"""
作者:白浪
日期:2021年11月25日
"""

import pytesseract
from PIL import Image
import os
import re

# 生成正则表达式查找name模板
find_name = re.compile(r'(物 联 1941.*)\n')
# print(os.listdir('./收取的截图'))

# 所有人的集合
name_list = []
os_len = len(os.listdir('./收取的截图'))
for i in range(os_len):
    try:
        im_src = './收取的截图/' + os.listdir('./收取的截图')[i]
    except:
        continue
    im=Image.open(im_src,mode="r")
    String = pytesseract.image_to_string(im,lang='chi_sim')
    # print(String)
    name = re.findall(find_name, String)
    print(name)
    try:
        if len(name) != 0 and name[0] != '' and name[0] not in name_list:
            try:
                name_list.append(name[0])
                os.renames(im_src, './筛选后的截图/' + name[0] + '.jpg')
            except:
                os.remove('./筛选后的截图/' + name[0] + '.jpg')
                print('文件' + name[0] + '.jpg 已经存在了,进行下一张判断' )
    except:
        pass

print(name_list)
print(len(name_list))

点击全文阅读


本文链接:http://m.zhangshiyu.com/post/37676.html

鼠标  图片  截图  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1