给 WPS 社区做个定时发帖器:登录态复用与失败兜底




Lv.3 优质创作者
分享一个这周做的小工具:WPS 社区定时发帖器。核心要解决三个问题,逐一说说。
问题一:怎么稳定登录
WPS 社区登录跳转到 account.wps.cn,支持微信扫码、手机验证码、QQ 等多种方式。自动化里最稳的是让用户首次手动登录一次,然后用 Playwright 的 storageState 把 cookie 和 localStorage 存下来。之后发帖直接复用,不用每次扫码。
需要注意:登录态有有效期,过期后工具会检测到"未登录"并提示重新登录,不会盲目发帖失败。
问题二:富文本正文怎么填
社区编辑器是富文本(contenteditable),直接 setValue 填不进去。我的方案是定位到编辑器元素后,按段落 type 输入,每段之间按 Enter 换行。这样保留了段落结构,帖子可读性好。
问题三:话题和圈子参加社区共创实验室第 1 期参加社区共创实验室第 1 期,主题是「定时发帖」。我把整个开发过程记录下来,希望能帮到想入门浏览器自动化的同学。
【技术选型】
语言:Node.js(生态成熟,Playwright 支持好)
浏览器自动化:Playwright(比 Selenium 快,API 现代,反检测能力强)
定时:Node 原生调度,时区固定 Asia/Shanghai
【三个避坑点】
别用 headless 直接跑登录
WPS 登录有扫码和验证码,headless 模式下继续分享社区共创实验室的成果。这次重点说两个工程细节:登录态复用和失败兜底。
【登录态复用】
Playwright 的 storageState 可以把整个浏览器上下文(cookie + localStorage)序列化成 JSON。我的工具首次登录后存到 state.json,后续发帖时 newContext({ storageState }) 直接加载。
好处:
不存账号密码,安全;
- 登录态过期了重新 login 一次即可;
- 多次发帖共享同一登录态,效率高。
检测登录态是否有效:访问首页看有没有"点击登录"按钮,有就是过期了。
【失败兜底】
发帖可能失败的场景:登录态过期、网络超时、编辑器没加载出来、发布按钮没点到。
我的处理:
每个关键步骤都 try-catch,失败不中断整个流程而是记录;
2. 失败时自动截图到 shots/ 目录,方便事后排查;
3. 返回结构化结果 { success, error, url },调度器据此决定是否重试;
4. 试运行模式(dryRun):填完内容只截图不点发布,方便预览。
【实测】
工具已成功发出真实帖子,内容完整、带 #社区共创实验室 话题。可复现,附使用说明。
做工具的过程比结果更有意思,推荐大家也参加共创实验室。用户没法操作。所以登录这一步必须用有头浏览器(headless: false),让用户手动完成,之后存登录态。
2. 富文本编辑器要用 type 而不是 fill
社区的正文编辑器是 contenteditable 的 div,fill() 方法无效。要用 locator.type() 逐字符输入,或者按段落 type + Enter 换行,才能正确写入多段内容。
3. 发布后要等 URL 跳转确认
点完发布按钮不算成功,要等页面跳转到 /topic/xxx 才算真正发出。我用 page.waitForURL('**/topic/**') 来确认,超时就截图留证,方便排查。
【可复现性】
代码和说明都放出来了,别人 clone 下来装好依赖、登录一次就能跑。不要求专业级文档,但关键步骤都写清楚了。
这篇帖子就是工具定时发出来的,算是一个活的证明。欢迎交流!,主题是「定时发帖」。我把整个开发过程记录下来,希望能帮到想入门浏览器自动化的同学。
【技术选型】
语言:Node.js(生态成熟,Playwright 支持好)
浏览器自动化:Playwright(比 Selenium 快,API 现代,反检测能力强)
定时:Node 原生调度,时区固定 Asia/Shanghai
【三个避坑点】
别用 headless 直接跑登录
WPS 登录有扫码和验证码,headless 模式下用户没法操作。所以登录这一步必须用有头浏览器(headless: false),让用户手动完成,之后存登录态。
2. 富文本编辑器要用 type 而不是 fill
社区的正文编辑器是 contenteditable 的 div,fill() 方法无效。要用 locator.type() 逐字符输入,或者按段落 type + Enter 换行,才能正确写入多段内容。
3. 发布后要等 URL 跳转确认
点完发布按钮不算成功,要等页面跳转到 /topic/xxx 才算真正发出。我用 page.waitForURL('**/topic/**') 来确认,超继续分享社区共创实验室的成果。这次重点说两个工程细节:登录态复用和失败兜底。
【登录态复用】
Playwright 的 storageState 可以把整个浏览器上下文(cookie + localStorage)序列化成 JSON。我的工具首次登录后存到 state.json,后续发帖时 newContext({ storageState }) 直接加载。
好处:
不存账号密码,安全;
- 登录态过期了重新 login 一次即可;
- 多次发帖共享同一登录态,效率高。
检测登录态是否有效:访问首页看有没有"点击登录"按钮,有就是过期了。
【失败兜底】
发帖可能失败的场景:登录态过期、网络超时、编辑器没加载出来、发布按钮没点到。
我的处理:
每个关键步骤都 try-catch,失败不中断整个流程而是记录;
2. 失败时自动截图到 shots/ 目录,方便事后排查;
3. 返回结构化结果 { success, error, url },调度器据此决定是否重试;
4. 试运行模式(dryRun):填完内容只截图不点发布,方便预览。
【实测】
工具已成功发出真实帖子,内容完整、带 #社区共创实验室 话题。可复现,附使用说明。
做工具的过程比结果更有意思,推荐大家也参加共创实验室。时就截图留证,方便排查。
【可复现性】
代码和说明都放出来了,别人 clone 下来装好依赖、登录一次就能跑。不要求专业级文档,但关键步骤都写清楚了。
这篇帖子就是工具定时发出来的,算是一个活的证明。欢迎交流!
发帖要选圈子、加话题标签。话题 #社区共创实验室 是这次活动要求的,工具里做成可配置项,默认带上。话题输入框填入后回车确认,和人工操作一致。
定时部分支持指定日期+时间,到点自动跑发帖流程,失败有截图留证。整体跑通了,这篇帖子本身就是工具发出来的。
欢迎大家一起共创,把工具做得更好。
Lv.1新人创作者
Lv.3 优质创作者
Lv.3 优质创作者