别人都在认真听课,而我埋头写Python为主播疯狂点点点点点赞!
最近有次在钉钉看直播,发现这个直播非常之精彩,于是情不自禁地想要为主播大佬连刷一波赞:

但我发现,手动连击点赞速度十分不可观。气人的是,钉钉直播不能长按刷赞!这让我很恼怒。心中满怀的激动和兴奋以及对大佬的崇高的敬意无法尽情表达,于是我一拍桌子,好,写个脚本来 刷赞 表示敬意!古有怀怒未发,休祲降于天,今有难以点赞,拍桌写代码!
(我这一言难尽的文学素养……)

话不多说,马上开始!
钉钉点赞程序
这个简单的程序只需要用到一个库:pyautogui。
进入 cmd 命令行,安装库:
pip install pyautogui
然后在代码里导入库:
import pyautogui as pg
接下来做一个设置,设置操作间隔时间:
pg.PAUSE = 0.01 # 设置操作间隔时间
这样,程序每点击一次点赞按钮,都会有 0.01 秒的间隔时间,防止因点击过快造成卡顿等问题。
点赞器 1.0版
首先我们要获取点赞按钮的坐标,我们可以通过 position 方法获取,我获取到的坐标是 (1568, 771):
print(pg.position()) # 打印鼠标当前坐标,返回一个 Point 对象:Point(1568, 771)
小 tip: 这个要怎么搞呢?很多编辑器都有 编译代码 快捷键(比如 IDLE 默认为F5,Sublime Text 里默认为Ctrl+B),那么我们可以将光标移到目标位置,按下 F5,即可以运行这句代码,它会输出光标此时的坐标。或者我们也可以进入 IDLE 里的交互模式,输入这句代码后,将鼠标移到目标,然后按下回车即可运行。
接下来要控制光标点击按钮。pyautogui 库实现点击操作的方法是 click:
pg.click(x, y)
- 传入两个参数:点击位置的横坐标和纵坐标。横坐标、纵坐标我们已经知道了(这里是 1568, 771)。
接下来放上程序代码:
import pyautogui as pg
pg.PAUSE = 0.01 # 每个操作之间间隔0.01秒
#print(pg.position())
for i in range(500): # 循环点赞500次
pg.click(1568, 771) # 点击
print(i) # 打印循环次数
看看 1.0 版点赞器的效果:

(由于点赞很快,大拇指有时候会蹦不出来了,不过我们可以看到点赞量还是在蹭蹭上涨的)
点赞器 2.0版
愉快地疯狂点赞后,很快我就发现一个严重的问题:点赞 难以暂停!就像下面这样:

当我想要停止刷赞,去做做别的事情的时候,我发现鼠标根本挪不开!一移开又被强制移回来,这样体验很不好。
特别是当我尝试刷上万个赞的时候,我等得花都谢了,人都要疯掉了但是它还没点完!这让我意识到:我必须提供一个方法让用户中断点赞!
于是我对代码进行了改进,增加了一个判断:如果鼠标坐标不等于按钮坐标的话,就判定为鼠标移开,自动跳出 for 循环,停止点赞。当然,在第一次循环,也就是第一次点击前,鼠标还没移过去呢,因此我们还得排除掉这种情况。看看最新代码:
import pyautogui as pg
#print(pg.position())
pg.PAUSE = 0.01 # 每个操作之间间隔0.01秒
for i in range(500):
if i and pg.position() != (1568, 771): # 判断鼠标是否离开
print('break')
break # 跳出循环,停止点赞
pg.click(1568, 771) # 点击
print(i) # 打印循环次数
然后这是最新效果:

可以看到,在鼠标挪开之后,点赞就立刻停止了。不戳不戳。
点赞器 3.0版 ——大幅增速
我写这玩意的初衷是:方便地给大佬点赞 和 提高点赞速度。既然现在点赞很方便了,那么我就琢磨着把速度再提升一下。我将间隔时间 PAUSE 改为了 0.001,看看效果怎么样:
pg.PAUSE = 0.001 # 设置操作间隔时间

不错,不错,很快(快到已经卡住了),看看所用时间:

500个赞用了13秒。
我再试试多线程?
下面这个代码我导入了threading库,开了两个线程,试试效果怎样:
import pyautogui as pg
from threading import Thread # 多线程库
#print(pg.position())
pg.PAUSE = 0.01 # 每个操作之间间隔0.01秒
# 点赞函数
def run(n):
for i in range(250): # 由于两个线程,因此把每个线程点赞数减一半
if i > 1 and pg.position() != (1568, 771):
print('break')
break
pg.click(1568, 771)
print(i)
# 两个线程
t1 = Thread(target=run, args=('t1',))
t2 = Thread(target=run, args=('t2',))
# 线程开始
t1.start()
t2.start()
看一看开两个线程的效果:

我们可以看到这已经非常快(卡到不行)了,用了多少时间?

好家伙只需要 6 秒,时间直接减半!很棒很棒针不戳!
不过我觉得我还是更愿意用回 2.0 版,因为更顺畅一些,否则,连直播界面都是卡顿的 [流泪][流泪] 没办法,电脑配置太低 。
所以我建议大家,尽量别开多线程来点赞。尤其不要尝试开 10000 个线程点 10000 个赞!那时候不知道你电脑还在不在……
——the End——
谢谢你的阅读!关注作者,跟作者一起学Python!
2022/2/4
别人都在认真听课,而我埋头写Python为主播疯狂点点点点点赞!的更多相关文章
- 别人都在认真听课,我埋头写Python为主播疯狂点点点点点赞!
最近有次在钉钉看直播,发现这个直播非常之精彩,于是情不自禁地想要为主播大佬连刷一波赞: 但我发现,手动连击点赞速度十分不可观.气人的是,钉钉直播不能长按刷赞!这让我很恼怒.心中满怀的激动和兴奋以及对大 ...
- 学习《人人都是产品经理2.0:写给泛产品经理》高清中文PDF+苏杰(作者)
<人人都是产品经理2.0--写给泛产品经理>将从人开始,以人结束,中间说事,以一个产品从无到有的过程为框架--想清楚.做出来.推出去,外加一章综合案例.其中,最重要的想清楚.做出来.推出去 ...
- 剑指offer40:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字
1 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 2 思路和方法 (1)异或:除了有两个数字只出现了一次,其他数字都出现了两次.异或运算中,任 ...
- 你真的理解了java单例模式吗?讲别人都忽略的细节!
前言:老刘这篇文章敢做保证,java的单例模式讲的比大多数的技术博客都要好,讲述别人技术博客都没有的细节!!! 1 java单例模式 直接讲实现单例模式的两种方法:懒汉式和饿汉式,单例模式的概念自己上 ...
- <[你在荒废时间的时候别人都在拼命!]>
如果我在这里退缩了,那么再也不可能前进 当人有了目标的时候,就会有拼命努力的动力. 当一个人真的掌握了一些东西的时候,才会觉得踏实,这就是所谓的内涵. 人生其实就是这样一步步走过去的.付出总有回报,回 ...
- 别人都在用数据分析软件,你还在用excel做数据分析?
之前听朋友吐槽过,他们是上千人的企业,但做数据分析居然还是靠手动上传数据,而且还是用的excel做的.但其实excel并不是企业做数据分析的好工具. 数据分析是指用适当的统计分析方法对收集来的大量数据 ...
- 还在用Excel做数据分析?别人都在用数据分析工具啦!
"Excel在过去.现在和未来都是一个无比优秀和天才的工具,无数虔诚的信徒将其奉为唯一的法门,而我却并不在其中了." 作为一个数据分析师,Excel是我入门必备的数据分析工具,虽然 ...
- 什么,你还使用 webpack?别人都在用 vite 搭建项目了
一.vite 到底是干嘛的? vite 实际上就是一个面向现代浏览器,基于 ES module 实现了一个更轻快的项目构建打包工具. vite 是法语中轻快的意思. vite 的特点: 1.轻快的冷服 ...
- 前两篇转载别人的精彩文章,自己也总结一下python split的用法吧!
前言:前两篇转载别人的精彩文章,自己也总结一下吧! 最近又开始用起py,是为什么呢? 自己要做一个文本相似度匹配程序,大致思路就是两个文档,一个是试题,一个是材料,我将试题按每题分割出来,再将每题的内 ...
随机推荐
- 为什么加密后的数据往往都是base64输出而不是hex16进制输出
通常加密后的数据都是字节数组,比如流行的aes128对称加密,还有Rsa非对称加密,加密后得到了一个字节数组,这个字节数组存在内存中,往往我们需要输出得到我们人眼能看到的字符. 加密aes(xxx) ...
- java-git 暂存
在接到需求以后,直接在master上开发了,到提交的时候才想起来忘记新建版本分支了,直接提交到master会影响到其他人. 这时候就想着将本地编辑的代码,没有提交的代码暂存起来,然后新建一个新分支,再 ...
- Linux组
Linux组 介绍 Linux中,没有用户和文件可以脱离组而存在 用户有"组"这一属性:相关链接 文件有"所有者""组""其他组& ...
- 编写Java程序,通过给定可变参数方法,计算任意给定的多个int类型数据之和
返回本章节 返回作业目录 需求说明: 通过给定可变参数方法,计算任意给定的多个int类型数据之和. 实现思路: 定义可变形参方法,参数类型是int类型. 定义变量 sum 接受最终的和. 通过 for ...
- 编写Java程序,创建Dota游戏中的兵营类,兵营类有一个类成员变量count、一个实例变量name和另一个实例变量selfCount。
返回本章节 返回作业目录 需求说明: 创建Dota游戏中的兵营类 兵营类有一个类成员变量count.一个实例变量name和另一个实例变量selfCount. count表示的是兵营已经创建士兵的总数: ...
- 编写Java程序,判断输入的三条长度的边,是否能构成三角形
需求说明: 编写Java程序,判断输入的三条长度的边,是否能构成三角形. (三角形第三边大于两边之和小于两边之差) 实现代码: package test; import java.util.Scann ...
- 美和易思 · 「云农职互联网技术学院」HTML+CSS 做西普尼金表官网
假期作业,好久没碰了,代码写得很烂......写博客纯属记录! 源代码下载地址:https://download.csdn.net/download/weixin_44893902/12805555 ...
- 面试中问你MySql,这一篇就够了
说一说主键索引与唯一索引 主键是一种约束,唯一索引是一种索引,两者在本质上是不同的. 主键索引默认是聚簇索引.唯一索引一般是非聚簇索引. 主键索引不能为空,唯一索引在InnoDB中可以出现多个null ...
- 使用uiautomatorviewer,查看app页面元素,进行元素定位
环境搭建: 安装adt,安装成功后,就可以在adt路径下的tools文件夹中找到uiautomatorviewer.bat 用来做什么? uiautomatorviewer.bat是用来扫描和分析An ...
- 初识python 之 爬虫:爬取某电影网站信息
注:此代码仅用于个人爱好学习使用,不涉及任何商业行为! 话不多说,直接上代码: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:201 ...