当前位置:网站首页>绝了!自动点赞,我用 PyAutoGUI!
绝了!自动点赞,我用 PyAutoGUI!
2022-06-25 04:01:00 【Python 技术】

文 | 闲欢
来源:Python 技术「ID: pythonall」

在上篇文章《Python自动操作 GUI 神器——PyAutoGUI》中,我跟大家讲解了一下 pyautogui 的一些基础知识和操作,大家反馈很好,给了我好多赞,在此先跟大家说声三克油!
在得到大家正反馈的同时,我受到了很大鼓舞,感觉如果只是介绍一下基础操作,有点不过瘾,所以今天晚上加班回来,虽然很不想打开电脑,但是还是忍着疲惫给大家奉献一个小实例。
为此,我跑去洗手间用凉水洗了一把脸,顿时清醒多了,下面进入正题。
作为一个 GUI 操作的神器,我们看到了它的操作都很简单,非常通俗易懂,基本上看到函数就能知道它的功效。
下面我来给大家演示一个小栗子,看了这个栗子后你就会明白它的神器由来了。
好了,不给大家绕弯子了,今天的小栗子就是批量给知乎的文章点赞。
思路
我们先来看看知乎的个人主页:

这里,我将下面的 tab 标签切换到文章这里,显示的就是作者的文章列表。
我们先来想一下,如果我要给这位作者的文章点赞,我需要怎么做?
首先,我需要找到点赞的图标;然后,我点击点赞图标,完成一次点赞;当我将视野内的文章点赞完成后,我拖动页面往下滑,继续上面的步骤。
看到这里,你是不是觉得这么说有点二?
但是我们写程序就必须这样,把每一个步骤都明确,然后根据步骤去写逻辑,不然当你动手写逻辑的时候,你可能会遗漏一些细节,导致程序无法达到预期效果,或者出现bug。
实现
有了上面的步骤,我们就可以着手开发代码了。
首先,我要让程序识别点赞的按钮。上篇文章中我介绍过一个小栗子,就是从桌面上找到浏览器的图标,我们需要将浏览器的图标截图保存为一张图片,然后传给程序,让程序用这张图片到屏幕中去寻找。
这里也是一样,我先将知乎的点赞按钮截了图:

按照上面的步骤,我首先需要识别当前桌面上的点赞按钮,只需要一行代码:
allLocation = pyautogui.locateAllOnScreen('agree.png')这样就可以找到桌面上所有的点赞按钮了。
找到点赞按钮之后,下一步就是点赞了:
def like():
time.sleep(1)
if pyautogui.locateOnScreen('agree.png'):
left, top, width, height = pyautogui.locateOnScreen('agree.png')
center = pyautogui.center((left, top, width, height))
pyautogui.click(center)
print('点赞成功!')这里,我首先休息了1秒钟,防止程序运行过快,把页面搞崩溃或者触发平台的安全策略。
接着我找到点赞的按钮,计算按钮的中心点,然后进行点击。
这样,我们就顺利地完成了一次点赞操作。
然后,我再来写一个判断,如果当前桌面上的点赞按钮都点过了,就滚动屏幕,到下一屏继续点赞:
while True:
allLocation = pyautogui.locateAllOnScreen('agree.png')
if len(list(allLocation)) > 0:
like() # 调用点赞函数
else:
try:
pyautogui.scroll(-500)
print('我滚了!')
except:
print('完蛋啦')整个代码运行起来是这样的:

注意,在程序运行过程中,一定要将打开知乎页面的浏览器切换到桌面最上层,以保证你当前操作的是这个页面。
这里没有写终止条件,所以程序会一直运行下去,直到你手动终止。
总结
整个栗子就是这样的,简约而不简单,虽然只有几行代码,但是替我完成了一次自动化操作。可能这里举知乎的例子还不太恰当,因为知乎是有分页的,如果是瀑布流的页面,那真的可以一直点赞下去,或许你可以试试给 csdn 的文章点赞。
PS:公号内回复「Python」即可进入Python 新手学习交流群,一起 100 天计划!
老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

【代码获取方式】
识别文末二维码,回复:闲欢

边栏推荐
- GBASE 8s的数据视图
- GBASE 8s的并行操作问题场景描述
- Unit test coverage
- 《牛客刷verilog》Part I Verilog快速入门
- 彻底理解数据库事务
- GBASE 8s存储过程流程控制
- Le chemin de l'apprentissage immutable - - Adieu à la copie traditionnelle
- PostgreSQL database Wal - RM_ HEAP_ ID logging action
- Value transfer between parent and child components of wechat applet
- 重磅直播 | 相移法+多频外差之数学原理推导+实现
猜你喜欢

「 每日一练,快乐水题 」1108. IP 地址无效化

CTF_ Web: basic 12 questions WP of attack and defense world novice zone

Upgrade PHP to php7 The impact of X (I). The problem of session retention. Keep login

Musk released humanoid robot. Why is AI significant to musk?

Anaconda安装+TensorFlow安装+Keras安装+numpy安装(包含镜像和版本信息兼容问题)

领导:谁再用 Redis 过期监听实现关闭订单,立马滚蛋!

机器学习深度学习——向量化

Gbase 8s index b+ tree

CTF_ Web: Advanced questions of attack and defense world expert zone WP (15-18)

WPF 使用 MAUI 的自绘制逻辑
随机推荐
515. 在每个树行中找最大值 / 剑指 Offer II 095. 最长公共子序列
WPF 使用 MAUI 的自绘制逻辑
GBase 8s的封锁技术的基本介绍
为什么TCP握手刚刚好是3次呢?
Blob page in gbase 8s
After the newly assigned variable of the applet is modified, the original variable will also be modified
Structure syntaxique des procédures stockées gbase 8S
Excel exports data to SQL and pictures to folder through macro | VBA
GBASE 8s的多线程结构
The consciousness of a programmer
Join() in JSZ
SQL注入详解
Upgrade PHP to php7 The impact of X (2), the obsolescence of mcrypt decryption
GBASE 8s存储过程流程控制
Kotlin Compose 完善toDo项目 Surface 渲染背景 与阴影
i. Max development board learning record
小白学习MySQL - 统计的'投机取巧'
Retrofit 源码分析
Immutable学习之路----告别传统拷贝
冰冰学习笔记:循环队列的实现