做自动化的人都知道,写代码不难,难的是跟平台的反爬斗。最近我用 Playwright 做了一个多平台自动发布的工具,把国内主流的几个平台挨个打通了一遍。回头一看,这些坑一个比一个阴间,不踩一遍你根本想不到。挑四个最经典的说说。
一、知乎:富文本编辑器根本不认 innerHTML
知乎的文章编辑器底层是 Draft.js(React 的富文本框架)。一开始我图省事,直接 innerHTML = content,结果提交的时候内容直接丢了——Draft.js 内部维护着自己的 state,你改 DOM 它根本不认。
最后只能模拟键盘输入:
await page.click('.DraftEditor-root');
await page.keyboard.insertText(content);
insertText() 会触发 React 的合成事件,Draft.js 才认这笔输入。就这一下,卡了我大半天。
二、微信视频号:DOM 藏在 Shadow DOM 里
视频号用了个叫 wujie 的微前端框架,页面结构全塞在 的 Shadow DOM 里。普通的 document.querySelector() 全是 null,CSS 选择器全部失效。
得先穿透进去:
const shadowRoot = await page.evaluate(() =>
document.querySelector('wujie-app').shadowRoot
);
三、思否:WAF 直接把你整个自动化拦死
思否上了 Safeline WAF,自动化请求统一返回 HTTP 468。我试过 headless、headful、换 UA、加 stealth,全被 JS Challenge 卡在门外。这种不是技术能硬刚的,只能绕过或者人工介入。
四、B站:视频上传完 ≠ 传完了
B站的视频上传是分片的,你等 input 事件触发没用,文件传上去之后它还要在后台转码。得等到「重新上传」按钮出现,才算真正上传完毕:
await page.waitForSelector('.upload-reencode-btn', { timeout: 300000 });
这还不算完,之后还要等转码进度条走完。一个视频发布流程,光"等"就要好几分钟。
这四个坑,分别对应了四种不同的反爬思路:前端框架事件拦截(React)、DOM 隔离(Shadow DOM)、WAF 拦截、复杂异步流程。做自动化的,基本都会撞上其中一两个。
如果你也在做类似的事——数据采集、自动化脚本、RPA、多平台内容分发——卡在某个平台上搞不定,欢迎私聊交流。
另外我自己也接相关的私活:Python 脚本定制、数据采集、自动化代做、多平台自动发布,有需求可以直接私信。
Top comments (0)