窗外是深圳湾的暮色,海面上有货轮缓缓移动。我盯着屏幕上十几个需要手动签到的标签页,突然觉得有点荒谬。一个自诩要建立流量自动化管道的人,每天早上的第一件事竟然是像打卡工人一样,机械地点击十几个“签到”按钮。这简直是对我32岁职业生涯的嘲讽。
必须解决掉。立刻。
第一个念头是写个浏览器插件。但很快就否决了——不同网站结构天差地别,用插件去适配每个网站的DOM变化,维护成本会高到让我想哭。而且有些签到需要加载完页面才能触发,模拟点击的时机很难把握。
那就用最原始也最可靠的办法:直接模拟HTTP请求。
我打开Postman,开始抓包。第一个目标是某个资源论坛,签到后会送几个虚拟币。抓到的请求很简单,一个POST到checkin.php,带上formhash和referer就行。关键在于Cookie的保持。我用Python的requests库写了个简单的Session对象,先访问首页获取必要的token和cookie,再构造签到请求发出去。测试一次,成功。
但问题来了。有些网站的签到机制很狡猾,会在页面里埋一个动态生成的csrf_token,每次刷新都变。对付这种,就得先解析一次页面,用正则或者BeautifulSoup把token抠出来。我写了个函数专门处理这种“动态防御型”签到,代码开始变得有点臃肿。
最麻烦的是那个云服务商的后台。他们的签到居然用了JavaScript渲染,单纯发HTTP请求拿不到完整的页面。我试了用Selenium,但想到要为了这一个点部署一个带图形界面的环境就头疼。最后找到了折中方案:用requests-html库,它能执行简单的JS。虽然重了点,但至少能在无头环境下跑起来。
写到一半,我突然停下来。
我在干嘛?
为了省下每天可能不到十分钟的手动操作,我已经坐在电脑前三个小时了。这时间成本怎么算?但下一秒我就把这个念头摁死了。这不是时间账,这是原则问题。任何需要重复三次以上的操作,都必须自动化。这是底线。
继续。
把所有网站的签到逻辑都封装成独立的函数后,我开始设计调度层。最初想用Windows的计划任务,但太丑了。转而考虑放到我那台常年开着的树莓派上,用cronjob来定时执行。可树莓派在老家,网络不稳定。目光转向了刚接触不久的“云函数”——虽然那时候国内还没那么火,但概念已经有了。找个能定时触发HTTP请求的服务,把脚本部署上去,让它每天定点跑。
这不就是Serverless的雏形吗?我居然在无意中踩到了这个点。
凌晨两点,代码终于跑通了。我设置了一个cron表达式,让脚本在每天上午九点自动执行所有签到任务。为了保险起见,我还加了个邮件通知功能,把每次签到的结果发到我邮箱。按下回车,看着日志一行行刷出来,十几个站点依次返回“签到成功”的状态码。
那种感觉。
就像在混乱的世界里,亲手划定了一小块绝对秩序的领土。
我关掉电脑,走到阳台上点了支烟。夜色里的深圳依然灯火通明,但我知道,从明天开始,有些东西不一样了。我不再需要被那些琐碎的按钮绑架,我的时间应该花在更值得的地方——比如,思考怎么让这套自动化体系,去吞噬更多重复的流程。
让机器去处理机器该做的事。
人得腾出手来,做点像人的事。哪怕只是发呆。














