Python模拟屏幕点击自动完成微信词达人任务

  • 该贴是以微信词达人为基础实践而写,如果我们并没有使用词达人,该源码中关键代码部分和模拟点击原理希望对大家有帮助。

Python模拟屏幕点击自动完成微信词达人任务

  • Python模拟屏幕点击自动完成微信词达人任务
    • 某度API申请
    • 过程解析
    • 对词达人自动点击完成任务我分为以下几个步骤
    • 视频演示地址:
    • 源码(有些包没有需要pip install)
    • 某度API申请

某度API申请

  • 方便大家观看体验,申请方法留在文章末尾

视频演示地址:查看演示,或者查看演示


过程解析

对词达人自动点击完成任务我分为以下几个步骤

  1. 将词达人窗口放置指定位置

理论python有方法自动找到窗口但是像词达人比较好控制的我们手动放置,这样容错率大大提高

  • 我的电脑分辨率为1920*1080(如何查看分辨率:设置->系统->显示)
  • 我们将词达人窗口防止左侧高度拉满,宽度最小为以下状态,使用截图软件截图后词达人窗口大小为480*1040
  1. 对词达人窗口进行截图
#抓取图片   #pcname为保存的文件名
def getPc(pcname):hwnd = 0 # 窗口的编号,0号表示当前活跃窗口# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)hwndDC = win32gui.GetWindowDC(hwnd)# 根据窗口的DC获取mfcDCmfcDC = win32ui.CreateDCFromHandle(hwndDC)# mfcDC创建可兼容的DCsaveDC = mfcDC.CreateCompatibleDC()# 创建bigmap准备保存图片saveBitMap = win32ui.CreateBitmap()# 获取监控器信息MoniterDev = win32api.EnumDisplayMonitors(None, None)w = 480        # w,h   #图片大小h = 1040# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)# 高度saveDC,将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap)# 截取从左上角(0,0)长宽为(w,h)的图片saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, pcname)

python有很多方法对屏幕截图哦,大家可以好好研究研究

  • 这是我使用代码截图后在编辑器看到的效果
  1. 使用某度API对截取的图片进行文字识别和信息识别(坐标信息)

如果使用orc等其它开源的识别方法次数不限但是太过依赖环境,直接调用api较为简单但是使用次数有限

# 使用百度Api对文件(图片)进行识别,response.json()包含文字位置信息f = open(pcname, 'rb')img = base64.b64encode(f.read())params = {"image":img}access_token = ACCESS_TOKENrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)print(response.json())

返回(部分)参数如下:表示识别了scre这个单词,单词文字像素高宽为40*14,在图片中的坐标为 (106,446)

  1. 根据我之前的获取词达人答案原理,将获取到的答案与识别的文字进行比对,比对到正确的文字时,记下位置
  2. 在屏幕中模拟点击记录的位置

视频演示地址:

  • 查看演示,或者查看演示

源码(有些包没有需要pip install)

import sys
import pyautogui
import winsound
import operator
from pymouse import PyMouse
import requests
import base64
import os
import json
import time
import time
import win32gui, win32ui, win32con, win32apitype = 0
lodec = 'C:\\responseBody.txt'APP_ID = '*****' # 刚才获取的 ID,下同
API_KEY = '******'
SECRECT_KEY = '******'
ACCESS_TOKEN = '你生成的access_token'#获取token
#第一次使用请先在main中调用一次getToken(),将其返回值access_token填到全局变量ACCESS_TOKEN 中
def getToken():# client_id 为官网获取的AK, client_secret 为官网获取的SKhost = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + API_KEY + '&client_secret=' + SECRECT_KEY response = requests.post(host)if response:return response.json().access_tokendef init():print("=====================词达人小工具3.0=====================\n\n")time.sleep(1)print('第一次使用请先在main中调用一次getToken(),将其返回值access_token填到全局变量ACCESS_TOKEN 中')if os.path.getsize(lodec) == 0:print("没有在C盘中找到资源,检查办法:\n(1):手动答题一道然后再打开本程序(前面的听力部分不算)\n(2):查看C盘下是否存在responseBody.txt文件\n(3):检查Fidder配置\n程序将在10秒后自动退出")time.sleep(10)exit()print("资源检查成功,开始使用\n请将该窗口放置合适位置\n程序会每10题暂停3秒,3秒期间你可以操作你的电脑")time.sleep(1)#读取答案
def getAnswer():print('搜寻答案....')answers = []data = json.loads(open(lodec, "r", encoding='utf-8').read());#多选if data['data']['topic_mode'] in [31] :options = data['data']['options']for option in options:if option['answer']==True :answers.append(option['content'])#单选if data['data']['topic_mode'] in [11,22,42] :options = data['data']['options']for option in options:if option['answer']==True :answers.append(option['content'].replace(' ', '').replace(';', ';').replace(',', ',').replace('.', '').replace('…', ''))#选词if data['data']['topic_mode'] in [32] :options = data['data']['answer_content']['answer_arr']for option in options:#print(option)answers.append(option)#填空if data['data']['topic_mode'] in [51] :type = 1answers.append(data['data']['answer_content'])for a in answers:print(a)return answers#抓取图片
def getPc(pcname):hwnd = 0 # 窗口的编号,0号表示当前活跃窗口# 根据窗口句柄获取窗口的设备上下文DC(Divice Context)hwndDC = win32gui.GetWindowDC(hwnd)# 根据窗口的DC获取mfcDCmfcDC = win32ui.CreateDCFromHandle(hwndDC)# mfcDC创建可兼容的DCsaveDC = mfcDC.CreateCompatibleDC()# 创建bigmap准备保存图片saveBitMap = win32ui.CreateBitmap()# 获取监控器信息MoniterDev = win32api.EnumDisplayMonitors(None, None)w = 480h = 1040# w,h   #图片大小# 为bitmap开辟空间saveBitMap.CreateCompatibleBitmap(mfcDC, w, h)# 高度saveDC,将截图保存到saveBitmap中saveDC.SelectObject(saveBitMap)# 截取从左上角(0,0)长宽为(w,h)的图片saveDC.BitBlt((0, 0), (w, h), mfcDC, (0, 0), win32con.SRCCOPY)saveBitMap.SaveBitmapFile(saveDC, pcname)#文字位置
def getPosition(answers, pcname):positions = []request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general"# 二进制方式打开图片文件f = open(pcname, 'rb')img = base64.b64encode(f.read())params = {"image":img}access_token = ACCESS_TOKENrequest_url = request_url + "?access_token=" + access_tokenheaders = {'content-type': 'application/x-www-form-urlencoded'}response = requests.post(request_url, data=params, headers=headers)if response:for r in response.json()['words_result']:flag = False#如果包含中文for ch in r['words']:if u'\u4e00' >= ch or ch >= u'\u9fff':flag = Trueif flag:w = r['words'][4:].replace('.', '')else:w = r['words']for a in answers:if w.find(str(a)) != -1 or str(a).find(w) != -1:tu = [r['location']['left'], r['location']['top']]positions.append(tu)return positions#屏幕点击答题
def makeAnswer(positions):m = PyMouse()for p in positions:#m.move(p[0], p[1])m.click(p[0], p[1])  #移动并且在(x,y)位置左击time.sleep(0.5)m.click(400,1000)if __name__ == "__main__":pcname = 'answers.jpg'init()i = 0while True:i += 1#获取正确答案集合answers = getAnswer()#截取图片getPc(pcname)#根据正确答案找到答案位置positions = getPosition(answers, pcname)#点击makeAnswer(positions)#每10题停留3秒:避免不可控if i>10:time.sleep(3)print("-------------暂停时期:3秒后继续答题-----------\n\n\n")i = 0

某度API申请

  • 进入百度AI控制台:百度AI控制台,没有账号就注册一个


随便填就行

立即创建后查看
下面这三个东西放到代码里就可以了

Python模拟屏幕点击自动完成词达人任务(附源码)相关推荐

  1. wpf 模拟抖音很火的罗盘时钟,附源码,下载就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了就用wpf, ...

  2. 曝肝三天,两千行Python代码,制作B站视频下载工具(附源码)

    曝肝三天,两千行Python代码,制作B站视频下载工具(附源码) 文章目录 一.准备工作 二.预览 1.启动 2.解析 3.下载中 4.下载完成 5.结果 三.设计流程 1.bilibili_vide ...

  3. wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑

    wpf 模拟抖音很火的罗盘时钟,附源码,解压就能跑 前端时间突然发现,抖音火了个壁纸,就是黑底蕾丝~~~  错错错,黑底白字的罗盘时钟! 作为程序员的我,也觉得很新颖,所以想空了研究下,这不,空下来了 ...

  4. 使用python多线程获取代理IP(代理IP池,附源码)

    @[TOC]使用python多线程获取代理IP(代理IP池,附源码) 代理IP池 都说现在是大数据的时代,大多数的厂商会特别的注重自己家的数据安全问题,但同时,也有着许多的行业是需要大数据来做支撑的, ...

  5. 手把手教你使用Python网络爬虫获取B站视频选集内容(附源码)

    点击上方"Python爬虫与数据挖掘",进行关注 回复"书籍"即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 位卑未敢忘忧国,事定犹须待阖棺. ...

  6. python 开发视频播放网站_python开发微电影视频网站教程附源码

    做为一个合格的Pythoner,只掌握一个框架是不够,如果你有过其它Python框架(例如django)的使用经验,对比不同框架的特性来学习,你将收获更多 当前信息若含有黄赌毒等违法违规不良内容,请点 ...

  7. 【爬虫实战项目】Python爬虫批量下载评书音频并保存本地(附源码)

    前言 今天给大家介绍的是Python爬虫批量下载评书音频并保存本地,在这里给需要的小伙伴们代码,并且给出一点小心得. 首先是爬取之前应该尽可能伪装成浏览器而不被识别出来是爬虫,基本的是加请求头,但是这 ...

  8. 分享30个有趣的 Python小游戏,我能玩一天(附源码)

    大家好,今天给大家带来30个 Python 小游戏,喜欢记得点赞.一定要收藏! 文章目录 有手就行 1.吃金币 2.打乒乓 3.滑雪 4.并夕夕版飞机大战 5.打地鼠 简简单单 6.小恐龙 7.消消乐 ...

  9. python 实现爬取指定小说(两种实现方案 .附源码)

    python 实现爬取指定小说实时下载(附源码) import requests import re import time import randomdef download(book_name): ...

最新文章

  1. 数据挖掘的一些经典算法
  2. module 'thread' has no attribute
  3. Android SimpleAdapter显示ListView、GridView
  4. pycharm如何改为中文显示?
  5. android安装python opencv_MacLinux环境在Android Studio中安装OpenCV
  6. Ubuntu平台 Qt 5.x 安装方法
  7. 【mysql知识点】查看和修改系统参数
  8. Eclipse配置关联Tomcat并运行项目
  9. java 怎么判别注释符_java学习笔记二(注释、关键字、标识符)
  10. [php]Undefined offset: 0错误
  11. Springboot-Flowable 快速开发工作流
  12. java传输文件暂停_java – 在文件下载中实现暂停/恢复
  13. 高通 AI、5G 争夺战!
  14. 解决spring的xml文件打开没有namespace等操作选项的问题
  15. Statement、PreparedStatement、CallableStatement的区别
  16. Photoshop 2020 新建文档窗口闪烁,点击创建按钮无效的解决办法(继续使用新版)
  17. 信息系统项目管理师学习笔记1——信息化与信息系统1
  18. h5手机端或PC端利用高德地图获取当前定位位置
  19. 快递行业前景:2022年市场迎来了发展新纪元
  20. 默认模式网络(Default mode network, DMN)

热门文章

  1. 用HTML制作用户注册网页
  2. Ethercat学习-从站源码移植
  3. 定位input的光标,设置光标的位置
  4. mac中执行命令ifconfig: invalid arguments
  5. 动画跨专业考研计算机,跨专业考研动漫
  6. 期中复习——题型总结
  7. js关闭当前窗口、标签页
  8. js关闭谷歌浏览器的当前页面
  9. 如何在论文中表格和图片变成引用格式,实现ctrl访问
  10. Java8 lambda表达式,Comparator.comparing().thenComparing()报错