• 基地树洞 | 自动化小系列之整合篇


    记得上初中的那会儿,玩过一个叫作 DNF 的游戏。

    如果你选的角色和我一样,都是神枪手,那么你大概记得,光是要开枪普攻就要不停地按X键,按一下打一发子弹。

    为此大家都会去网上下一个自动连点的小工具,有了这个小工具,只需长按X,就能自动实现连击,堪称完美。如今每当回想起来,再看看自己从事的行业,都觉得甚是有趣..

    说了这么多,当然和今天的话题有关,如果我们自己来实现这样一个自动连点的工具,又应该怎么做呢?

    关于自动化,在前面两篇文章里,我们已经介绍了 bat 脚本和 selenium 框架,但似乎并不能很好的解决上面的问题。

    事实上,我们需要再引入一个新的 python 框架,它就是pyAutoGUI,有了它,我们就可以实现对电脑桌面的自动化操作。

      快速入门  

    pyAutoGUI 与浏览器页面自动化操作类似,桌面自动化操作也是需要定位鼠标在桌面的位置,然后根据定位的位置执行对应的操作。

    至于具体的基础教程我就不再这里多讲了,动一动小手指,你就可以在网上搜到很多与之相关的文章~ 比如说下面这个:

    www.cppcns.com/jiaoben/python/476469.html

    关于pyAutoGUI,我认为它最强大的一点就是桌面定位功能,具体包含了截图识别,根据参考图片找到我们的要定位的元素,甚至还能调整识别可信度,这无疑是史诗功能。

    不必要去急着看我给出的教程链接,在接下来的实战案例里,我会使用注释标上具体的功能,后面再针对性的看教程即可。我始终认为,这种脚本方法,用到时去查即可。

      实战案例  

    假设前提

    • 某客服公司老板发现有一些员工经常很晚下班,原因是处理客户需求,觉得他们非常敬业,想对他们进行奖励。。

    • 但是公司系统只能查到员工的下班时间,不能准确的定位员工是真是加班还是摸鱼加班。

    • 老板想让你定时拿到员工的加班情况,并发企业微信给他,同时做好数据备份。发给老板的一份是供老板实时参考,保存的数据是供月底奖励时的统计汇总。

    • 公司系统中有一个在线用户模块,可以实时监测到当前在线的员工。当然在线的判断是根据呼叫中心的心跳来检测的,当你在正常进行客户需求处理时,才会显示在线,否则在线列表无显示。

    现在,你是选择定个闹钟,每30分钟去看一次员工在线情况,还是写一个脚本定时的监控和记录,

    然后在家悠闲的打王者荣耀呢?

    那当然选后者啦!

     解决思路  

    Step 1:分析下系统长什么样子

    Step 2:分析下接口长什么样子

    Step 3:思路

    由图可知,在线用户采用的是一次请求,返回所有的在线用户,然后交给前端进行分页。

    因此,我们只需保证我们登着企业微信,并间隔一段时间去请求该页面数据,然后自动进行处理,给领导发一份,给数据库存一份即可。

    Step 4:说干就干,上代码

    import datetimeimport jsonfrom time import sleepimport pyautoguiimport pyperclipimport requestsimport pymysqlurl = ‘http://101.xxx.xxx.185:90/api/user_online/list_allheaders = {‘token’: ‘eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJkYXRhxxxxxxxxxx3MzQyMCJ9.jx93ff7lc_68EfFeosc0mzPPWXq_yc2bbWjEiC6tyHU’}def save_db():# 记录数据库conn = pymysql.connect(host=‘localhost’,user=‘root’,password=123456’,database=‘DB’)cursor = conn.cursor()sql =INSERT INTO online(create_time, users) VALUES (%s, %s)”dt = datetime.datetime.now().strftime(“%Y-%m-%d %H:%M:%S”)cursor.execute(sql, (dt, str(users)))cursor.close()conn.commit()conn.close()def send_boss():# 根据提供的图片找到企业微信图标,定位中心,点击弹出企业微信主页面wx = pyautogui.locateOnScreen(‘D:/wx.png’)x1, y1 = pyautogui.center(wx)pyautogui.click(x1, y1)sleep(1)# 模拟按下 ctrl+fpyautogui.hotkey(‘ctrl’, ‘f’)sleep(1)# 模拟按下 ctrl+c 复制 ‘谷子毅’pyperclip.copy(‘谷子毅’)# 模拟按下 ctrl+v 粘贴 ‘谷子毅’pyautogui.hotkey(‘ctrl’, ‘v’)sleep(1)# 模拟按下 回车 定位到聊天框口pyautogui.hotkey(‘enter’)sleep(1)# 模拟按下 ctrl+c 复制 users转化的字符串内容pyperclip.copy(str(users))# 模拟按下 ctrl+v 粘贴 users转化的字符串内容pyautogui.hotkey(‘ctrl’, ‘v’)sleep(1)# 模拟按下 回车发送消息pyautogui.hotkey(‘enter’)# 模拟按下 alt+f4关闭窗口pyautogui.hotkey(‘alt’, ‘f4’)# 把鼠标从企业微信上挪走,防止下一次鼠标挡住图标导致无法识别pyautogui.moveTo(100, 100)# 脚本从这里开始执行while True:# 使用requests 获取请求结果result = requests.get(url, headers=headers)# 获取请求结果正文result = result.text# 解析json转对象result = json.loads(result)# 获取data数据data = result[‘data’]# 遍历结果,记录当前在线用户到 list  users = []  for user in data:      users.append(user['realName'])  # 给老板发消息  send_boss()  # 保存数据库,我本地没下载数据库,哈哈哈,可以自己尝试  # save_db()  print('本次发送结束!')  # 每30分钟发送一次  # sleep(30 * 60)  # 测试时,每1秒发送一次  sleep(1)

     代码详解 

    其实代码本身并没有什么难度,只是一个思路罢了,现在对其中几个小问题做下解析。

    #1

    D:/wx.png`图标是什么?

    D 盘下的图标就是拿截图软件对企业微信的一个截图。

    #2

    因为 pyAutoGUI 不能直接输入中文,所以需要 pyperclip 库的帮助,通过复制粘贴的方法来输入中文。

      说在最后  

    通过这几章的学习,我们基本上玩转了利用各种脚本实现的自动化操作,已经能基本具备解决各种生产生活中的自动化问题了。

    学了这么多,自己去试试吧,冲冲冲!

    最后再次强调,思路!思路!思路!思路最重要! 

    Why code?This may an answer ~

    解决生活中真实遇到的问题,而不是为了编码而编码,这或许才是我们应该反思的!

  • 相关阅读:
    如何使用Python进行机器学习?
    量化:基于支持向量机的择时策略
    vector容器中push_back()和emplace_back()函数的区别
    十二、MySql的事务(下)
    Defensor 4.5:构建数据资产为中心的安全运营体系
    应用在金银精炼控制系统中的Modbus转Profinet网关案例
    RocketMQ读写分离实战
    数学建模学习(81):群粒子算法求解最值(模板)
    [JavaWeb学习] tomcat简介、安装及项目部署
    c语言:解决数组中数组缺少单个的元素的问题
  • 原文地址:https://blog.csdn.net/CBGCampus/article/details/127848632