连接本地浏览器
反爬为了应对各类伪造的爬虫代理进行了很多发爬策略。因为 playwright 使用的是谷歌浏览器开发版。有些网站的安全级别比较高,有些可能采用了禁用谷歌开发版的策略(比如某呼)。
所以让爬虫直接操作你的浏览器是直接有效的策略。CDP (Chrome DevTools Protocol) 就是通过 chrome dev 协议直接操作浏览器的策略。因为是 chrome 内核的协议,所有基于Chromium的浏览器,包括Chrome、Edge、Opera、Brave、Vivaldi、Samsung Internet等都支持该协议。
selenium是可以做到这点,那么playwright也可以实现此功能。这时候就需要通过连接真实的浏览器工具来应对反爬策略。
chrome / edge 可以设置附加参数启动,然后开启 chrome / edge 本地远程链接 , 这里给出 window 两种创建远程浏览器链接的方法。 端口号自定义(本文预设为 9222 ),设置之前最好检查本地端口是否已经被使用。
通过命令方式启动
设置之前需要关闭指定的浏览器!!!
首先右键 Chrome 浏览器桌面图标,找到 chrome.exe 的安装路径
终端开发安装路径
cd C:\\Program File\Google\Application
chrome.exe --remote-debugging-port=9222
通过快捷方式启动
设置之前需要关闭指定的浏览器!!!
打开 chrome.exe 所在文件目录,不知道文件目录,可以通过 任务管理器
里面 查看文件所在位置
查看文件目录位置
右键 chrome.exe 创建桌面快捷方式,然后在桌面右键快捷方式 ,点击属性
编辑目标,在 chrome.exe 后面附带 --remote-debugging-port=9222
验证是否开启
如果浏览器开启远程链接成功,在浏览器上输入 localhost:9222/json/version 验证是否开启。
--remote-debugging-port=9222 开启失败
不出意外的话,按照上面的步骤开启 chrome 没有起作用,网上找到 xiaomi0322 的解决方法 chrome--remote-debugging-port 不起作用
执行命令行来强制关闭正在运行的 Chrome / edge
Window 终端
关闭 chrome
taskkill /F /IM "chrome.exe"
关闭 edge
taskkill /F /IM "msedge.exe"
然后在启动我们创建的快捷方式就可以了。
在浏览器上输入 localhost:9222/json/version 验证一下。
Playwright 远程链接 浏览器
chrome / edge 开启远程连接之后,就直接使用爬虫连接进行操作。
const browser = await chromium.connectOverCDP('http://127.0.0.1:9222');
const defaultContext = browser.contexts()[0];
const page = await defaultContext.newPage();
await page.goto("https://www.zhihu.com/people/wo-de-ni-cheng-bu-neng-shuo/posts")