别再点按钮了——我怎么把 5 小时的手工操作压到 2 分钟
起因很简单:我需要在一个没有 API 的平台上重复操作 30 次。 每次手动点进去、填表、提交,10 分钟一个。30 个就是 5 小时。 我不想干这件事。 ## 第一反应:写个脚本模拟点击 Selenium、Playwright,让脚本代替人去点按钮。 听起来合理,实际上是个坑。 现在的网站大多用 React 或 Vue 之类的框架搭建,它们有自己的一套事件系统。你的脚本发出去的点击,它不认。上传文件的按钮点不动,页面跳转之后元素找不到了,网站一更新 UI 脚本就废了。 我在这条路上浪费了一些时间,然后换了个思路。 ## 真正有用的思路:不管前端,只管请求 不管界面多复杂,用户点了什么按钮,最终都会变成一个 HTTP 请求发给服务器。 那个请求才是真正做事的地方。 所以我改变策略:不模拟人的操作,而是录下操作背后的请求。 做法很直接: 1. 打开目标网站,保持登录状态 2. 在页面里注入一段脚本,监听所有网络请求 3. 自己手动操作一遍 4. 脚本把所有请求的地址、参数、内容全部记录下来 这样我就拿到了这个平台私下的 API——虽然它没有公开,但它一直都在用。 ## 中间遇到了两个坑 第一个坑:登录信息拿不全。 拿到请求之后,放到脚本里跑,一直报 401 没有权限。查了很久才发现:网站的登录凭证(cookie)分两种,有一种叫 httpOnly,浏览器会自动带上,但你用常规方式读不到它。脚本里少了这个,服务器当然不认你。 解决方法是用 Chrome 的底层调试工具(CDP),可以把包括 httpOnly 在内的所有 cookie 一次性读出来。 第二个坑:把不该带的 cookie 也带上去了。 一个平台往往有多个子域名,登录之后浏览器里存着好几份 cookie。我把所有的都塞进请求里,结果服务器的安全校验反而失败了。解决方法是按域名过滤,只保留当前请求需要的那部分。 ## 最后做成了什么 把整套流程封装成一个命令行工具,不依赖任何第三方库,在任何电脑上都能跑。 结果:单个操作从 10 分钟压到 5 秒,30 个操作从 5 小时变 2 分钟。 ## 这套方法不只适用于这一个平台 只要是有网页界面、但没有开放 API 的系统,都可以这样做。外贸平台、内部管理后台、各种 SaaS 工具……你不需要等它开放 API,也不需要去求技术支持。网页能做的事,脚本都能做,而且快得多。
Source: