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

Mr Chen
Mr Chen WPS资深用户Lv.3 优质创作者KVPWPS产品体验官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

【三个避坑点】

  1. 别用 headless 直接跑登录

  1. WPS 登录有扫码和验证码,headless 模式下继续分享社区共创实验室的成果。这次重点说两个工程细节:登录态复用和失败兜底。

  1. 【登录态复用】

  1. Playwright 的 storageState 可以把整个浏览器上下文(cookie + localStorage)序列化成 JSON。我的工具首次登录后存到 state.json,后续发帖时 newContext({ storageState }) 直接加载。

  1. 好处:

  • 不存账号密码,安全;

  • - 登录态过期了重新 login 一次即可;

  • - 多次发帖共享同一登录态,效率高。

  • 检测登录态是否有效:访问首页看有没有"点击登录"按钮,有就是过期了。

  • 【失败兜底】

  • 发帖可能失败的场景:登录态过期、网络超时、编辑器没加载出来、发布按钮没点到。

  • 我的处理:

  1. 每个关键步骤都 try-catch,失败不中断整个流程而是记录;

  1. 2. 失败时自动截图到 shots/ 目录,方便事后排查;

  1. 3. 返回结构化结果 { success, error, url },调度器据此决定是否重试;

  1. 4. 试运行模式(dryRun):填完内容只截图不点发布,方便预览。

  1. 【实测】

  1. 工具已成功发出真实帖子,内容完整、带 #社区共创实验室 话题。可复现,附使用说明。

  1. 做工具的过程比结果更有意思,推荐大家也参加共创实验室。用户没法操作。所以登录这一步必须用有头浏览器(headless: false),让用户手动完成,之后存登录态。

  1. 2. 富文本编辑器要用 type 而不是 fill

  1. 社区的正文编辑器是 contenteditable 的 div,fill() 方法无效。要用 locator.type() 逐字符输入,或者按段落 type + Enter 换行,才能正确写入多段内容。

  1. 3. 发布后要等 URL 跳转确认

  1. 点完发布按钮不算成功,要等页面跳转到 /topic/xxx 才算真正发出。我用 page.waitForURL('**/topic/**') 来确认,超时就截图留证,方便排查。

  1. 【可复现性】

  1. 代码和说明都放出来了,别人 clone 下来装好依赖、登录一次就能跑。不要求专业级文档,但关键步骤都写清楚了。

  1. 这篇帖子就是工具定时发出来的,算是一个活的证明。欢迎交流!,主题是「定时发帖」。我把整个开发过程记录下来,希望能帮到想入门浏览器自动化的同学。

【技术选型】

语言:Node.js(生态成熟,Playwright 支持好)

浏览器自动化:Playwright(比 Selenium 快,API 现代,反检测能力强)

定时:Node 原生调度,时区固定 Asia/Shanghai

【三个避坑点】

  1. 别用 headless 直接跑登录

  1. WPS 登录有扫码和验证码,headless 模式下用户没法操作。所以登录这一步必须用有头浏览器(headless: false),让用户手动完成,之后存登录态。

  1. 2. 富文本编辑器要用 type 而不是 fill

  1. 社区的正文编辑器是 contenteditable 的 div,fill() 方法无效。要用 locator.type() 逐字符输入,或者按段落 type + Enter 换行,才能正确写入多段内容。

  1. 3. 发布后要等 URL 跳转确认

  1. 点完发布按钮不算成功,要等页面跳转到 /topic/xxx 才算真正发出。我用 page.waitForURL('**/topic/**') 来确认,超继续分享社区共创实验室的成果。这次重点说两个工程细节:登录态复用和失败兜底。

  1. 【登录态复用】

  1. Playwright 的 storageState 可以把整个浏览器上下文(cookie + localStorage)序列化成 JSON。我的工具首次登录后存到 state.json,后续发帖时 newContext({ storageState }) 直接加载。

  1. 好处:

  • 不存账号密码,安全;

  • - 登录态过期了重新 login 一次即可;

  • - 多次发帖共享同一登录态,效率高。

  • 检测登录态是否有效:访问首页看有没有"点击登录"按钮,有就是过期了。

  • 【失败兜底】

  • 发帖可能失败的场景:登录态过期、网络超时、编辑器没加载出来、发布按钮没点到。

  • 我的处理:

  1. 每个关键步骤都 try-catch,失败不中断整个流程而是记录;

  1. 2. 失败时自动截图到 shots/ 目录,方便事后排查;

  1. 3. 返回结构化结果 { success, error, url },调度器据此决定是否重试;

  1. 4. 试运行模式(dryRun):填完内容只截图不点发布,方便预览。

  1. 【实测】

  1. 工具已成功发出真实帖子,内容完整、带 #社区共创实验室 话题。可复现,附使用说明。

  1. 做工具的过程比结果更有意思,推荐大家也参加共创实验室。时就截图留证,方便排查。

  1. 【可复现性】

  1. 代码和说明都放出来了,别人 clone 下来装好依赖、登录一次就能跑。不要求专业级文档,但关键步骤都写清楚了。

  1. 这篇帖子就是工具定时发出来的,算是一个活的证明。欢迎交流!

发帖要选圈子、加话题标签。话题 #社区共创实验室 是这次活动要求的,工具里做成可配置项,默认带上。话题输入框填入后回车确认,和人工操作一致。

定时部分支持指定日期+时间,到点自动跑发帖流程,失败有截图留证。整体跑通了,这篇帖子本身就是工具发出来的。

欢迎大家一起共创,把工具做得更好。

甘肃省
浏览 107
收藏
6
分享
6 +1
4
+1
全部评论 4
 
princess公主89
princess公主89 WPS资深用户WPS寻令官Lv.1 新人创作者

Lv.1新人创作者

   福建省
举报
1
0
 
秦时南月
秦时南月 WPS资深用户Lv.3 优质创作者WPS寻令官

Lv.3 优质创作者

大神速度真快啊
   陕西省
举报
2
2
Mr Chen
Mr ChenWPS资深用户Lv.3 优质创作者KVPWPS产品体验官WPS寻令官

Lv.3 优质创作者

正在测试,这眼睛都没看呢,东西已经发出去了,,谢谢大佬
· 甘肃省
举报
1
0