当前位置:网站首页>绝了!自动点赞,我用 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 天计划!
老规矩,兄弟们还记得么,右下角的 “在看” 点一下,如果感觉文章内容不错的话,记得分享朋友圈让更多的人知道!

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

边栏推荐
- 微信小程序父子组件之间传值
- 成功解决:selenium.common.exceptions.TimeoutException: Message: timeout: Timed out receiving message from
- 分布式websocket搭建方案
- [untitled]
- A detailed summary of four handshakes (or four waves) over TCP connections
- jsz中的join()
- What is persistence? What are RDB and AOF in redis persistence?
- 彻底理解数据库事务
- 515. 在每个树行中找最大值 / 剑指 Offer II 095. 最长公共子序列
- Kotlin Compose 监听软键盘 点击enter提交事件
猜你喜欢

Upgrade PHP to php7 The impact of X (2), the obsolescence of mcrypt decryption

js的arguments

JS' sort() function

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

我的IC之旅——资深芯片设计验证工程师成长——“胡”说IC工程师完美进阶

Unity Quad culls shaders with back faces and transparent parts

Vscode 设置clang-format

WPF 使用 MAUI 的自绘制逻辑
![[untitled]](/img/68/5e711f7c473dcea54a56f7b7e48604.png)
[untitled]

The solution of wechat applet switchtab unable to take parameters
随机推荐
Introduction to the isolation level of gbase 8s
What is persistence? What are RDB and AOF in redis persistence?
GBASE 8s 索引B+树
Upgrade PHP to php7 The impact of X (I). The problem of session retention. Keep login
小白学习MySQL - 统计的'投机取巧'
dotnet-exec 0.4.0 released
js的call()和apply()
多睡觉,能减肥,芝加哥大学最新研究:每天多睡1小时,等于少吃一根炸鸡腿...
The solution of wechat applet switchtab unable to take parameters
记录小知识点
Immutable learning road -- farewell to traditional copy
Gbase 8s stored procedure flow control
Gbase 8s memory management
Le chemin de l'apprentissage immutable - - Adieu à la copie traditionnelle
Unit test coverage
Codeforces Round #802 (Div. 2) C D
CTF_ Web: deserialization of learning notes (II) CTF classic test questions from shallow to deep
GBASE 8s的级联删除功能
i. Max development board learning record
[esp32 learning path 6 - Flash encryption]