不瞒大家说,这个方法非常实用,一年前的代码至今仍然可以正常使用。但我今年年初时候买了个服务器,就寻思将这些本地电脑的定时任务都迁移到服务器上。这个时候再去回看之前的代码,使用Selenium作为我们的自动签到解决方案就显得有些“笨重”了。
我今天呢,要给大家分享一下升级款——request方式。
具体做法
首先打开我们需要签到的网站,使用Chrome浏览器的F12快捷键(或通过鼠标右键菜单“检查”)打开浏览器的开发者工具,点击 Network 查看所有加载的请求。
如下方动图所示,这个时候我们手动点击签到,就会发现出现了一个新的post请求(checkin),不出所料这便是我们签到的请求。
而我们要做的事就是将该请求转换为Python代码,具体的方法也非常简单,详见之前的文章:每一个搞爬虫的人,都应该知道的神器!其中我们分享了两种可以一键将curl请求命令转Python请求代码的方法。
回到前文一开始发现的新请求,如下图所示,右键复制网络抓到的网络请求为cURL(bash)。
然后打开网站:https://curl.trillworks.com/
将刚刚复制的内容,填写该网站左侧,右侧同时生成了对应的 python requests
代码。
import requests
headers = {你自己的headers}
cookies = {你自己的cookies}
response = requests.post('https://*********.org/user/checkin', cookies=cookies, headers=headers)
剩下的事就很简单了,只需要每天定时执行该代码(模拟发起post签到请求)就可以实现该网站签到。
与之前的方法相比,最大的优势就是代码更精简、执行时间更短。selenium实现自动签到需要模拟浏览器进行加载、点击操作,即便用上显性等待等操作也只能控制到10秒左右.
这个签到代码除了增加定时功能,还可以增加通知功能(比如通过微信/飞书/钉钉来提醒自己签到成功+签到结果)。
├──书籍《快学Python:自动化办公轻松实战》
│ ├── 9.3.4 案例 :Python 机器人定时发送消息
│ ├── 9.4.4 案例 :利用 Python 制作飞书机器人
书中的案例都是来源于真实需求,而我自己也确实是这么做的,定时任务可以这样写:
import schedule
import requests
headers = {你自己的headers}
cookies = {你自己的cookies}
def job():
res = requests.post('https://*********.org/user/checkin', cookies=cookies, headers=headers)
schedule.every().day.at("09:50").do(job)
while True:
schedule.run_pending()
time.sleep(1)
比如今天给大家介绍的网站签到方法,已经在我的服务器正常运行半年多了,同时每天早上9.30我的飞书都能收到签到成功的提醒。
文章评论