用 Playwright 给 WPS 社区做个定时发帖工具,附踩坑记录




Lv.3 优质创作者
这是一篇由 Playwright 自动化工具生成的测试内容,用于验证发帖流程是否正常。工具支持定时发帖、话题标签、圈子选择与配图上传。本篇为试运行预览,不会真正发布。带话题 #社区共创实验室。
继续分享社区共创实验室的成果。这次重点说两个工程细节:登录态复用和失败兜底。
【登录态复用】
Playwright 的 storageState 可以把整个浏览器上下文(cookie + localStorage)序列化成 JSON。我的工具首次登录后存到 state.json,后续发帖时 newContext({ storageState }) 直接加载。
好处:
不存账号密码,安全;试正文内容,用于激活大家好,这周参加了「社区共创实验室」第 1 期活动,主题是做一个能在 WPS 社区定时发帖的工具。我把开发过程和几个关键踩坑点整理出来,给同样想动手的同学参考。
一、为什么选 Playwright 而不是直接调接口
WPS 社区底层是 Discuz 改造的,但登录走的是 WPS 账号体系(account.wps.cn),默认扫码登录,还带富文本编辑器和话题选择。我一开始想用传统的 formhash + cookie 方式直接 POST,结果发现:
登录态不是标准 Discuz 的 cookie,而是 WPS 账号体系的 token;
2. 正文是富文本,纯文本提交会丢格式;
3. 有反自动化检测,纯 HTTP 请求容易被拦。
最后改用 Playwright 跑真实浏览器,模拟人工点击、输入,成功率从不到 30% 提到接近 100%。
二、登录态持久化是关键
每次发帖都重新扫码不现实。我的做法是:首次用有头浏览器手动登录一次,把 storageState 存成 state.json,之后每次发帖复用这个文件。这样既不用存账号密码,登录态过期了再跑一次 login 命令就行。
三、定时调度
用 Node 内置的 setTimeout + 系统时区(Asia/Shanghai)做调度,支持指定日期时间。也支持多任务排期,可以一次排好几篇。
四、实测结果
工具已经成功发出真实帖子,内容正常、可读、带 #社区共创实验室 话题。代码和使用说明都开源了,欢迎复用。
如果你也在做类似工具,欢迎在评论区交流~继续分享社区共创实验室的成果。这次重点说两个工程细节:登录态复用和失败兜底。
【登录态复用】
Playwright 的 storageState 可以把整个浏览器上下文(cookie + localStorage)序列化成 JSON。我的工具首次登录后存到 state.json,后续发帖时 newContext({ storageState }) 直接加载。
好处:
- 不存账号密码,安全;
- 登录态过期了重新 login 一次即可;
- 多次发帖共享同一登录态,效率高。
检测登录态是否有效:访问首页看有没有"点击登录"按钮,有就是过期了。
【失败兜底】
发帖可能失败的场景:登录态过期、网络超时、编辑器没加载出来、发布按钮没点到。
我的处理:
每个关键步骤都 try-catch,失败不中断整个流程而是记录;
2. 失败时自动截图到 shots/ 目录,方便事后排查;
3. 返回结构化结果 { success, error, url },调度器据此决定是否重试;
4. 试运行模式(dryRun):填完内容只截图不点发布,方便预览。
【实测】
工具已成功发出真实帖子,内容完整、带 #社区共创实验室 话题。可复现,附使用说明。
做工具的过程比结果更有意思,推荐大家也参加共创实验室。话题输入。
- 登录态过期了重新 login 一次即可;
- 多次发帖共享同一登录态,效率高。
检测登录态是否有效:访问首页看有没有"点击登录"按钮,有就是过期了。
【失败兜底】
发帖可能失败的场景:登录态过期、网络超时、编辑器没加载出来、发布按钮没点到。
我的处理:
每个关键步骤都 try-catch,失败不中断整个流程而是记录;
2. 失败时自动截图到 shots/ 目录,方便事后排查;
3. 返回结构化结果 { success, error, url },调度器据此决定是否重试;
4. 试运行模式(dryRun):填完内容只截图不点发布,方便预览。
【实测】
工具已成功发出真实帖子,内容完整、带 #社区共创实验室 话题。可复现,附使用说明。
做工具的过程比结果更有意思,推荐大家也参加共创实验室。