Python|PyAutoGUI实现自动点赞收藏

最近公司要求每月要在某APP中完成1000积分的积累,算下来每月要点赞+收藏文章三百多篇。像我这样积极的青年当然要想办法偷个懒~

思路

该APP恰巧有网页版(没有网页版的话PC端估计还要搭建个安卓模拟器)。最开始尝试过通过requests库获取未读文章并更新积分,不过尝试了很多浏览器的伪装依然失败了😂😂后来考虑通过PyAutoGUI库实现模拟鼠标的操作。

PyAutoGUI是一个纯Python的GUI自动化库,可实现鼠标和键盘的操作。实现方式也很简单:打开目标网站,通过代码控制鼠标,打开未读的文章,并找到“点赞”和“收藏”的按钮坐标,完成点击+收藏操作后关闭该篇文章,之后更新未读文章后循环操作即可。

过程

实操下来就用了十几行代码,实测了五六分钟完成了100篇文章的处理,轻轻松松完成两百多积分的获取。事了拂衣去,深藏功与名~

源码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pyautogui
import time

def auto_click():
pyautogui.click(1645,774,duration=1) # 收藏 Point(x=1645, y=774)
pyautogui.click(1742,772,duration=1) # 点赞 Point(x=1742, y=772)
pyautogui.click(1016,29,duration=0.6) # 关闭标签 Point(x=1016, y=29)

if __name__ == '__main__':
time.sleep(5) # 手工打开待处理浏览器
i = 0
while (i<100):
if i%2 == 0:
pyautogui.click(1594,447,duration=0.6) # 时间优先 Point(x=1594, y=447)
pyautogui.click(615,578,duration=0.6) # 打开第一篇文章 Point(x=615, y=578)
else:
pyautogui.click(1751,447,duration=0.6) # 热度优先 Point(x=1751, y=447)
pyautogui.click(615,578,duration=0.6) # 打开第一篇文章 Point(x=615, y=578)
auto_click()
i+=1
print('累计处理{}篇'.format(i))

总结

PyAutoGUI相比requests、urllib库可以用更少的代码量解决此问题,免去了反爬虫的处理,但实际使用时还是发现了一些小的问题:因为是依靠屏幕坐标系完成鼠标的操作,在点赞、收藏图标位置变化(虽然频次很低)时不能很好的处理。我尝试过pyautogui.locateCenterOnScreen()去定位点赞和收藏按钮的具体位置来完成每一篇精准无误的点赞+收藏,但因为识别成功率和识别效率也没有很高就放弃了。即便如此,PyAutoGUI依旧是神器,助我顺利划水,轻松完成月度积分目标😁😁😁

PyAutoGUI库的功能有点像我前几年使用过的按键精灵、UIPath机器人。类似PyAutoGUI的python库还有win32gui、pywinauto等,后续有机会了再研究下。不可否认的是,作为一种解释性语言,python毫无疑问是值得我深入学习和使用的。

附:PyAutoGUI库基本用法整理

鼠标/键盘/提示框基本操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
####鼠标操作####
pyautogui.position() # 获取当前鼠标的坐标
pyautogui.locateCenterOnScreen(r'C:/Users/admin/Desktop/sc.png') # 根据图像获取当前界面含有该图像的中心坐标
pyautogui.click(1751,447,button='left',duration=1) # 鼠标左单击。button的参数值有:left,righ,middle
pyautogui.doubleClick(10,10) # 指定位置,双击左键
pyautogui.rightClick(10,10) # 指定位置,双击右键
pyautogui.middleClick(10,10) # 指定位置,双击中键
pyautogui.mouseDown() # 鼠标按下
pyautogui.mouseUp() # 鼠标释放
pyautogui.dragTo(100,300,duration=1) # 拖动到指定的位置
pyautogui.dragRel(100,500,duration=4) # 按方向拖动,第一个参数是左右移动像素值,第二个是上下
pyautogui.scroll(300) # 向上滚动300个单位;
pyautogui.moveTo(100,300,duration=1) # 移动鼠标到x,y的位置,移动时间1秒
pyautogui.moveRel(100,500,duration=4) # 向右移动x,向下移动y,移动时间4秒

####界面操作####
im = pyautogui.screenshot() #返回屏幕的截图,是一个Pillow的image对象
im.save('屏幕截图.png') #保存屏幕截图
im.getpixel((500, 500)) #返回im对象上,(500,500)这一点像素的颜色,是一个RGB元组
pyautogui.pixelMatchesColor(500,500,(12,120,400)) #是一个对比函数,对比的是屏幕上(500,500)这一点像素的颜色,与所给的元素是否相同;

####键盘输入####
pyautogui.keyDown('shift') # 按下shift
pyautogui.press('4') # 按下 4
pyautogui.keyUp('shift') # 释放 shift
pyautogui.typewrite('this',0.5# 第一参数是输入内容,第二个参数是每个字符间的间隔时间;
pyautogui.typewrite(['T','h','i','s']) #typewrite 还可以传入单字母的列表;
pyautogui.typewrite(['T','i','s','left','left','h',]) # 有时我们需要输入一些特殊的按键,比如向左的箭头,这些有相对应的键盘字符串表示,例如输出:This
pyautogui.hotkey('ctrl','c') # 快捷键

####提示信息框####
a = pyautogui.alert(text='This is an alert box.', title='Test') # 提示框/警示框
print(a)
a = pyautogui.confirm('选择一项', buttons=['A', 'B', 'C']) # 选择框
print(a)
a = pyautogui.password('Enter password (text will be hidden)') # 密码输入,返回值为刚刚输入的值
print(a)
a = pyautogui.prompt('请输入一个数字:') # 普通输入,返回值为刚刚输入的值
print(a)

####其他####
pyautogui.size() # 获取屏幕分辨率

## 停顿功能。意味着所有pyautogui的指令都要暂停一秒;其他指令不会停顿;这样做,可以防止键盘鼠标操作太快;
pyautogui.PAUSE = 1
## 自动防故障,默认这项功能为True, 这项功能意味着:当鼠标的指针在屏幕的最坐上方,程序会报错;目的是为了防止程序无法停止;
pyautogui.FAILSAFE =False

识别图像

首先,我们需要先获得一个屏幕快照,例如我们想要点赞,我们就先把大拇指的图片保存下来;然后使用函数:locateOnScreen(‘zan.png’) ,如果可以找到图片,则返回图片的位置,如:Box(left=25, top=703, width=22, height=22);如果找不到图片,则返回None;
如果,屏幕上有多处图片可以匹配,则需要使用locateAllOnScreen(‘zan.png’) ,如果匹配到多个值,则返回一个list,参考如下:

1
2
3
4
5
6
7
8
9
10
import pyautogui
pyautogui.PAUSE = 1

# 图像识别(一个)
btm = pyautogui.locateOnScreen('zan.png')
print(btm) # Box(left=1280, top=344, width=22, height=22)

# 图像识别(多个)
btm = pyautogui.locateAllOnScreen('zan.png')
print(list(btm))

pyautogui.center((left, top, width, height)) 返回指定位置的中心点;这样,我们就可以再配合鼠标操作点击找到图片的中心。


商业转载请联系作者获得授权,非商业转载请注明出处。

支付宝打赏 微信打赏

如果文章对你有帮助,欢迎点击上方按钮打赏作者

Python|PyAutoGUI实现自动点赞收藏
http://hncd1024.github.io/2022/08/14/Python PyAutoGUI/
作者
CHEN DI
发布于
2022-08-14
许可协议