
起因:
在进行某些网站的数据采集时,我遇到了一个棘手问题:目标站点采用了高度反爬机制,所有常规爬虫框架(如 Puppeteer、Selenium、Playwright)均无法有效加载页面内容或被强制跳转。最终确认,这些网站只能在真实用户的浏览器中访问并展示完整数据。
经过与问题分析:
为了破解这个限制,我采取了一个迂回策略:通过自建本地 VPN 的方式,捕获并获取了所有浏览器真实访问返回的响应体。这意味着我可以从系统层拿到完整 HTML 和数据,只差一环——如何让浏览器自动化地打开页面、滑动、点击,实现数据采集的自动化。
明确的需求:
- 控制用户实际使用的浏览器(Chrome/Edge)打开指定页面
- 实现自动跳转、滚动、点击、表单操作等常见浏览行为
- 避免使用无头浏览器或额外的 GUI 控制(如按键精灵)
- 需要能与已有的本地程序集成,实现数据采集逻辑的统一
探索的两种方案:
方案一:Chrome DevTools Protocol(CDP)
- 通过
--remote-debugging-port=9222
启动 Chrome,开启 WebSocket 接口 - 本地程序通过 WebSocket 连接,实现页面跳转、点击、滚动、获取源码等操作
- 基于 TCP,协议清晰,支持语言多,调试方便
方案二:浏览器插件 + Native Messaging
- 开发浏览器扩展 + 本地程序
- 浏览器扩展接收 JSON 消息控制 DOM 行为(跳转、点击、滚动等)
- 本地程序与浏览器插件通过 stdin/stdout 管道通信,必须注册注册表项或 manifest
- 适用于控制用户真实浏览器,适合桌面级长期驻留控制
最终选择:
经过评估,我最终选择了CDP 方式,理由如下:
- 实现快速、简单、无需额外插件开发
- 控制能力强:支持页面跳转、滚轮滑动、点击元素、获取源码等
- 完美兼容我已有的“本地 VPN 响应体抓取”方案,仅依靠CDP的真实浏览器环境与远程操作来实现爬虫的自动化.
- 调试便捷,协议开放,官方文档完善
目前已实现的功能:
- 浏览器绑定与连接
- 页面跳转(支持新标签页)
- 滚动控制(支持像素单位滑动)
- 获取页面完整 HTML 源码
接下来我将继续扩展对 DOM 的点击、输入、监听等自动化操作模块,进一步完善整个爬虫自动化流程。
如果你也在真实浏览器自动化方向遇到瓶颈,不妨试试 CDP 的方式,可能它正是你寻找的突破口。