原文发表在:微信公众号【老潘家的潘老师】

项目github地址:https://github.com/divertingPan/Auto_Lottery

目录

为什么要做这个呢?

自动点赞

获取点击的位置

自动点赞

检测有没有抽奖

获取屏幕

截图预处理

文本识别

字符串与子串

组装

实际测试

总结


为什么要做这个呢?

在各类直播平台,都有对主播点赞的功能,有一些直播平台(例如淘宝直播)的点赞按钮是可以无限点击的(为什么要双击666,明明可以无限击)。在淘宝直播中,主播看到自己收获很多赞之后,有概率放一些粉丝福利,某些福利是以抽奖为形式的,粉丝们在互动区疯狂发送关键字,主播随机截图,并给在截图中的粉丝送出福利。这个过程需要粉丝疯狂的点赞,以及实时盯着屏幕以防什么时候开始刷屏抽奖。如果全程亲自操作,依靠自己手动点击的话,不能解放双手,是非常拉低做事效率的。如果依靠自己盯着屏幕看,也是非常原始的做法。

所以,如果能有一个自动点赞+自动窥屏的外挂将会让我们在薅羊毛的路上满载而归。

鉴于之前已经有同学实现了自动挖掘抖音美女的案例,所以这个想法终于有了一丝付诸实践的曙光,潘老师和这位同学一样使用了Python+ADB的方式来实现。

Python大家都很熟悉,人生苦短,我用Python。

ADB(Android Debug Bridge)则是一种通过电脑调试控制安卓设备的技术,我可以在电脑上输入指令,达到和手工操作一样的效果(比如说我可以用电脑控制安卓手机点开某个应用,点击某个按钮等等)。仿佛开了外挂一样舒爽。

(前期准备工作需要安装:Python环境,opencv,pillow,ADB并配置好环境变量,免费注册一个百度文本识别的账号)

自动点赞

获取点击的位置

我想知道点击了屏幕之后,这个点的位置是多少,该如何操作?

首先连接电脑与手机,手机打开USB调试,接着在电脑上打开cmd输入

adb shell getevent

这时cmd会等待点击。

我点击了键盘上a字母的位置,cmd给出了以下信息。找到下面的信息,最后位置的十六进制数就是坐标,换算成十进制即可。

/dev/input/event4: 0003 0035 XXXXXXXX
/dev/input/event4: 0003 0036 YYYYYYYY

自动点赞

首先,ADB语句控制点击屏幕上某一点的指令是:

adb shell input tap 123 456

其中的123 456是点击位置的坐标,这个坐标可以通过上一节方式获取。经过测试,淘宝直播的右下角点赞按钮坐标大概是(1015, 1730)。

为了避免让淘宝觉得这个操作太机器人,所以不让他每次都点击到这个固定点,让他随机出现一个偏移(虽然仔细想想好像这样做也没什么意义)。

为了一直点下去,加一个循环进去,使用for循环,可以指定给主播点多少个赞。同样地,为了不让淘宝觉得点击速度太均匀,加入一个随机的延迟。点赞主要的部分就是如下代码了:

import os
import time
import randomdef click_hearts(i):delay = random.uniform(0.1, 0.5)time.sleep(delay)randomX = str(random.randint(-15, 15) + 1015)randomY = str(random.randint(-20, 20) + 1730)cmd = 'adb shell input tap ' + randomX + ' ' + randomYos.popen(cmd)print('%s%d, %s%f%s, %s(%s,%s)'%('已点赞 X', i, '延迟', delay, 's','点击坐标:', randomX, randomY))for i in range(1,21): # 自动点赞20次click_hearts(i)

实际测试一下,我们先使用这个方法点一点键盘上的a字母看看:

嗯还是可以的。

检测有没有抽奖

获取屏幕

ADB截取屏幕的指令是:

adb shell screencap -p /sdcard/autolottery.png

其中-p后面接的是存放的路径和文件名。

ADB把文件从手机中拷贝出来的指令是:

adb pull /sdcard/autolottery.png ./img

第一个路径是手机中文件的路径和文件名,后一个路径是存放在电脑中的路径,./img表示存在当前py文件目录下的img文件夹里。

在python中给Android发送ADB指令则通过调用系统cmd实现,让python帮你把引号里面的句子输进cmd并且执行:

def get_screen():os.system('adb shell screencap -p /sdcard/autolottery.png')os.system('adb pull /sdcard/autolottery.png ./img')

截图预处理

由于直接拿来截图进行文本识别,正确率较低(经过测试实际是非常低了),所以需要对源图像处理一下。这里需要安装opencv和pillow。

首先裁剪出文本区域,尽量去除干扰。

import cv2
from PIL import Imagedef cut_image():# 裁出文字识别区image = Image.open('img/autolottery.png')box1 = (0, 1100, 800, 1700) #设置图像裁剪区域(left, upper, right, lower)image1 = image.crop(box1)image1.save('img/textarea.png')

然后将该区域二值化,提升识别率,由于要识别的文字部分颜色是纯白,所以阈值可以设的大一些:

def extract_text():# 图像分割image = cv2.imread("img/textarea.png")image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 转灰度图(T, threshInv) = cv2.threshold(image, 230, 255, cv2.THRESH_BINARY_INV) # 反阈值化,阈值为215cv2.imwrite('img/textextract.png', threshInv)

原图:

处理后:

文本识别

二话不说,直接怼百度的文本识别。百度毕竟是汉语起家,识别汉语的准确度还是很高的

from aip import AipOcr
# 配置百度AipOcr
APP_ID = '自己去注册'
API_KEY = '自己去注册'
SECRET_KEY = '自己去注册'client = AipOcr(APP_ID, API_KEY, SECRET_KEY)def baidu_ocr_text():# 百度文本识别AipOcrimage = open('img/textextract.png', 'rb').read()msg = client.basicGeneral(image)text = 'result:\n'for i in msg.get('words_result'):text += (i.get('words') + '\n')print(text)return text

看一下识别上面图片的结果:

在识别简体中文的同时,不耽误识别数字,实际上识别中文的同时英文字母也可以识别但是准确率低一些。

字符串与子串

这种基本算法(虽说潘老师算法很渣)就不需要解释很多了,送分题。

def string_lottery(m_str, sub_str):count = 0# 第一层循环,从主字符串的第0个元素开始# 第二层循环,通过切片获取下标从i开始与子字符串长度一致的字符串,并与字符串比较,如果等于子字符串则count+1for i in range(len(m_str)-1):if m_str[i:i+len(sub_str)] == sub_str:count += 1return count

组装

当我们有了获取屏幕,并且识别其中文本的能力,那就让他自动为我们检测有没有出现抽奖契机,根据经验,如果屏幕中有4条以上抽奖关键字,证明抽奖要开始了,大家已经躁动起来了,所以要让刚刚识别出的那串文本里出现“指定关键字”这个子字符串数量大于等于4即可。

直接怼,不解释:

import ctypeswhile 1:get_screen()cut_image()extract_text()text = baidu_ocr_text()string_count = string_lottery(text, "抽奖")if string_count >= 4:ctypes.windll.user32.MessageBoxW(0, '要抽奖了,关键词出现次数:'+ str(string_count), '抽奖了', 0)break

因为目前时间主播还没有开播,所以先自己拿备忘录打几个字试试。

实际测试

可悲的事情发生了,测试的时候发现主播已经调整了抽奖方式,多数奖品用随机放出的“狂戳福利按钮”送出了,晚上只出了一次刷屏抽奖的方法。所以,这件事情告诉我们,产品研发就是在和时间赛跑。

所以,下次开发自动检测“狂戳福利按钮”并自动狂戳的外挂?

实际测试效果(关键字:“有草”):

在这个外挂的辅助下,潘老师还是没有抽到奖,也许这就是,非命不改。

总结

运气差这种事,用python都拯救不了。


其实单看这个外挂还是有很多成长空间的,例如:

【点赞】可以先检测用户点击的坐标,接受并传递给代码里的坐标。节省事先查坐标的时间和精力。

【抽奖】可以改造关键字的部分,不需要手动指定关键字,智能识别刷屏的字符串。再者还可以添加自动打字参与刷屏,以及自动检测抽奖结果,实现全自动无人值守式抽奖。


Python+ADB实现自动点赞和文字识别相关推荐

  1. python语言翻译成中文-Python 神工具包!翻译、文字识别、语音转文字统统搞定...

    原标题:Python 神工具包!翻译.文字识别.语音转文字统统搞定 今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子 ...

  2. python实现qq自动点赞_Python实现QQ自动点赞

    用python做一个QQ自动点赞神器,上代码: 1 def QQZan(qq): 2 browser = webdriver.chrome() 3 browser.maximize_window() ...

  3. Python 神工具包!翻译、文字识别、语音转文字统统搞定

    今天给大家介绍一款 Python 制作的实用工具包,包含多种功能: 音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子,比如截图 OCR 文字识别就有很多实用场景. 常会遇到有些 PDF ...

  4. python语音翻译-Python 神工具包!翻译、文字识别、语音转文字统统搞定

    今天给大家介绍一款 Python 制作的实用工具包,包含多种功能:音频转文字 文字转语音 截图 OCR文字识别 复制翻译 举个例子,比如截图 OCR 文字识别就有很多实用场景. 常会遇到有些 PDF ...

  5. python朋友圈自动点赞_python自动点赞功能的实现思路

    1.思路 通过pyautogui可以实现鼠标点击.滚动鼠标.截屏等操作.由此功能实现打开页面,进行点赞. aircv可以从大图像获得小图像的位置,利用pyautogui截屏得到的图片,可以在页面获取到 ...

  6. Python调用百度OCR实现图片文字识别

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  7. python+adb实现自动刷抖音视频

    安装adb和驱动 python代码实现 效果展现 安装adb和驱动 adb下载链接:https://pan.baidu.com/s/1nvhgoOMzPkxqhzLjfkuaTQ 提取码:23a7 a ...

  8. python手机端自动点赞软件_python自动点赞功能的实现思路

    python自动点赞功能的实现思路 发布时间:2020-10-26 10:40:04 来源:脚本之家 阅读:92 1.思路 通过pyautogui可以实现鼠标点击.滚动鼠标.截屏等操作.由此功能实现打 ...

  9. 女友:啥,识别个文字还要付费?我立马用Python实现了一款免费版文字识别工具

    导语 有一天和女朋友聊天,翻着手机上的软件,看电影.看编程网站, 她说到:"这么多 APP,怎么就没一个做文字识别很方便的呢? 我经常读书读到一段话想把它摘抄下来,可是这些软件不是打开进入文 ...

最新文章

  1. Flutter调试技巧总结——高效开发的秘密
  2. OpenKruise v1.1:功能增强与上游对齐,大规模场景性能优化
  3. eshop.sql(复制的时候注意路径!!!)
  4. 微信小程序-配置请求合法域名的问题以及豆瓣api问题
  5. 谷歌技术quot;三宝quot;之MapReduce
  6. 《算法基础》——3.5 链表算法
  7. 怎样把DataSet转换成ArrayList
  8. OpenCV Mat类的convertTo函数,数据类型转换
  9. 计算机的主要元器件介绍,计算机基础电子元器件介绍
  10. android手机安装win10,安卓手机成功安装运行桌面版win10系统
  11. Android 开发中渐变背景的简单使用
  12. Matlab之使用linearization估计人口数量
  13. execute、executeQuery、executeUpdate的用途及返回值
  14. 苹果手机充值显示服务器繁忙,iTunes充值常见错误和解决方法
  15. visual studio 2019安装教程(详细的很)
  16. 【VOLTE】SIP leg
  17. 无法将“pytest”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
  18. java基于微信小程序的竞赛报名管理系统
  19. ABAQUS几何非线性问题:薄板大变形(如何定义材料方向)
  20. 神经网络算法的关键参数,神经网络输入输出计算

热门文章

  1. Centos7中java开发环境配置总结
  2. JavaScript 就要统治世界了?
  3. IT伦理与道德:Google的“不作恶”准则
  4. 优品购电商3.0微服务商城项目
  5. 行测-判断推理-类比推理-逻辑关系-交叉关系
  6. java如何写一个简单的定时任务?
  7. 通过例子学TLA+(二) -- DieHard
  8. 清华刘知远 | 流言能止于智者吗?网络虚假信息的特征与检测
  9. LOL丢失ACE-DRV32.dll文件
  10. 集成企业微信,企业微信扫码登录和企业微信容器内免密登录