概览
- Remote Browser:一个浏览器自动化框架,可以用脚本控制已经打开的浏览器。
- Selenium 是通用的浏览器测试框架
无头浏览器
- Puppeteer : 控制 Chrome 或 Chromium 的 Node 库
- Puppeteer 初探-示例
API
js
// 获取上下文句柄
const bodyHandle = await frame.$('body');
const html = await frame.evaluate(body => body.innerHTML, bodyHandle);
await bodyHandle.dispose();
const htmlHandle = await page.$('html');
const html = await page.evaluate(body => body.outerHTML, htmlHandle);
await htmlHandle.dispose();
🔥🔥🔥
const bodyInnerHTML = await page.$eval('body', dom => dom.innerHTML);
/***
page.evaluate: page context
page.evaluateHandle: page context, page.evaluateHandle returns in-page object (JSHandle).
page.$eval: browser context
page.mainFrame().$(selector)
executionContext.evaluateHandle: in-page object (JSHandle)
Frame、JSHandle、ElementHandle 可以执行 executionContext
***/- 注意
- page.screenshot 异步执行,如果在执行截屏之前浏览器已经
close会报错
- page.screenshot 异步执行,如果在执行截屏之前浏览器已经
远程调试模式
先启动一个支持远程调试的Chrome浏览器,然后手动在浏览器上完成登录操作,接下来爬虫代码就再也不需要考虑登录这个动作了,爬虫可以直接访问登录后的页面。
步骤:
- 使用参数
--remote-debugging-port=9222已命令行的形式运行 Chrome - 用普通浏览器访问
http://127.0.0.1:9222/json/version,获取webSocketDebuggerUrl的参数值 - 使用
xxx连接 Chrome
js
const webSocketDebuggerUrl = 'ws://127.0.0.1:9222/xxx'
const browser = await puppeteer.connect({
browserWSEndpoint: webSocketDebuggerUrl,
});参考
remote-browser:与 Puppeteer 类似的npm 包,使用【浏览器扩展程序 extensions】开发
cheerio-解析DOM:服务端根据 HTML 生成 DOM 结构
Run Selenium tests with NodeJS | BrowserStack Docs
Wireshark