• 欢迎关注我的微信公众号!点击

写个Python小脚本,给自己抢个口罩

Python 大坚果 4年前 (2020-03-08) 3185次浏览 2个评论 扫描二维码

国内的疫情最近几天在往好的方向发展,好多天山东都没有新增的新冠病毒感染者了,反观国外倒是愈发严重。每天都会上网看看疫情新闻,屋里睡睡懒觉,比较平淡。github 上发现一个团队整理的疫情timeline,而且每天还在持续更新,非常棒。

比较烦的是,还是得每天带着口罩出门、上班,可能接下来半年口罩都是必需品了吧。年前买的口罩,无良商家迟迟不给发货,不知是被政府征用了,还是嫌当时卖的太便宜了。幸运的是,政府政务网上还有的卖,而且良心价格,只是每周得抢购(5 个/人/周)。虽说不是那么难抢,可手残的我还是抢了好几次才抢到。周末闲的没事,花一个小时写个小脚本,以后每周都有口罩带了!

抢购平台分析

一般来说,政府的网站都是比较简单的,而且为应对疫情这种突发情况而设计的,更是不会太过复杂。果不其然,微信公众号上的链接,可以直接在 PC 浏览器上使用,整体界面也是简单明了。直接填入个人信息和验证码,提交就可以了。

写个Python小脚本,给自己抢个口罩

这里唯一的难点在于验证码的识别,因为这是提交前的关键一步。只要解决了验证码,就可以把信息直接提交给服务器

Python 脚本逻辑

对网站响应的分析,我发现:

  • 验证码图片,是来自一个固定的 URL;而且网站内只要出现验证码的地方,均为同一个
  • 每次刷新验证码 URL,都会更新 cookie 值
  • cookie 值将服务器验证码图片、post 回服务器的验证码信息相匹配。以此来保证,每次 get 与 post 的验证码是一一相对的。

因此,我的做法也是分了三部:访问验证码 URL,获取并识别验证码,将验证码与个人信息一同返回给服务器。

需要注意的是,为保证期间 cookie 值一直,这里要用 requests 库的 Session 会话,使得整个响应是在一整条会话中。

验证码识别

所有代码的逻辑都清楚了,但其中最麻烦的应该是验证码的识别了。网站中的验证码类似于如下的样式,是常见的 captcha 验证码,识别难度不高,github 上有很多相关的例子。写个Python小脚本,给自己抢个口罩但是,这个口罩抢购脚本我每周只用一次,而且抢购难度没那么大,我就没想再去折腾。直接采用人工识别的方式,将验证码下载到本地,我自己来识别。方便,准确率最高^_^

总结

整个过程使用到的库只有 requests、Pillow,除去个人信息资料外,关键性代码也只有 10 行左右。小身板,大能量!


墨痕|畅所欲言的小笔记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:写个Python小脚本,给自己抢个口罩
喜欢 (2)

您必须 登录 才能发表评论!

(2)个小伙伴在吐槽
  1. 棒棒的
    笑男2020-03-26 14:57