☰
手把手实现一个装修在线报价系统:可编辑表格 + 实时算量引擎(纯前端 JS)
2026/9/27 20:35:05 网站建设 项目流程

做内容运营或自托管 Agent 的同学大概率遇到过这类需求:要在多个平台(百家号、知乎、微博、CSDN、公众号)上自动写稿发文,但每个平台都要扫码登录,总不能每次跑脚本都重新登录一遍。
本文讲一套可落地的方案:用 Edge 的 CDP(Chrome DevTools Protocol)远程控制一个常驻、已登录的浏览器实例,Playwright 通过connect_over_cdp直接接管,实现"登录一次、长期复用"。## 核心思路正常playwright.launch()每次都是全新浏览器,cookie 全空。要保留登录态,关键是两点:1.固定用户数据目录:启动时带上--user-data-dir,让所有 cookie、localStorage 落盘到同一目录;2.通过 CDP 接管而非新开:启动参数加--remote-debugging-port=9222,再用connect_over_cdp("http://127.0.0.1:9222")连上。pythonimport sysfrom playwright.sync_api import sync_playwrightCDP = "http://127.0.0.1:9222"with sync_playwright() as p: b = p.chromium.connect_over_cdp(CDP) ctx = b.contexts[0] # 复用已登录的上下文 page = ctx.new_page() page.goto("https://baijiahao.baidu.com/builder/rc/edit?type=news") # 此时浏览器已经是登录态,无需再扫码## 启动命令(含登录态保持)bashmsedge.exe --remote-debugging-port=9222 \ --user-data-dir="C:/path/to/edge-profile" \ --no-first-run --no-default-browser-check````user-data-dir` 必须固定。只要这个目录不变,哪怕浏览器进程被回收重启,下次连上还是原来的登录态——这是整个方案能"无人值守"的关键。## 填稿:SPA 编辑器要等 hydrate现代富文本编辑器(如百家号、公众号)大多是 SPA,`goto` 后 DOM 还没就绪,直接找 `contenteditable` 会失败。正确做法是轮询等正文编辑区出现:pythonbody_frame = Nonefor _ in range(45): for fr in page.frames: try: if fr.evaluate(“() => document.body.getAttribute(‘contenteditable’)=‘true’"): body_frame = fr; break except Exception: pass if body_frame: break time.sleep(1)正文用 `keyboard.insert_text` 逐段写入,比 `type` 稳定;标题先 `Control+a` 清空再填,避免和上次内容叠加。## 发布时的坑:按钮被遮罩盖住百家号点"发布"前,编辑器会跑一段检测,期间一个 `.bjh-btn-disable-mask` 层盖住发布按钮。不处理的话点击无效、毫无反应。解决办法是发布前轮询遮罩是否消失:pythoncovered = page.evaluate(‘’'() => { const pub = […document.querySelectorAll(‘button’)].find(x => x.innerText.trim()=‘发布’); if (!pub) return true; const r = pub.getBoundingClientRect(); const top = document.elementFromPoint(r.x+r.width/2, r.y+r.height/2); return top ? !!top.closest(‘.bjh-btn-disable-mask’) : true;}‘’')```并且"发布"按钮要用精确文本匹配innerText.trim()==='发布',用has-text("发布")会误点到"定时发布”。## 公众号封面的"从正文选择"陷阱公众号编辑器不让直接拖拽上传封面,必须先把图插进正文,再到封面区点"从正文选择"。而那个按钮藏在 hover 浮层里(0×0 尺寸),Playwright 的.click()会因元素不稳定超时,得改用 JSel.click()强制触发。## 小结- 登录态 = 固定--user-data-dir+connect_over_cdp,别用launch();- 填稿前等 SPA hydrate,正文用insert_text;- 发布按钮先等遮罩消失,再精确匹配文本;- 平台特有交互(公众号封面、百家号封面确认)按上面套路兜底。把这几条封装成"启动 Edge → 轮询 CDP → 跑脚本"的单一命令,就能做到一键多发、无人值守。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询