Skip to content

概览

  • Remote Browser:一个浏览器自动化框架,可以用脚本控制已经打开的浏览器。
  • Selenium 是通用的浏览器测试框架

无头浏览器

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 会报错

远程调试模式

先启动一个支持远程调试的Chrome浏览器,然后手动在浏览器上完成登录操作,接下来爬虫代码就再也不需要考虑登录这个动作了,爬虫可以直接访问登录后的页面。

步骤:

  1. 使用参数 --remote-debugging-port=9222 已命令行的形式运行 Chrome
  2. 用普通浏览器访问 http://127.0.0.1:9222/json/version ,获取 webSocketDebuggerUrl 的参数值
  3. 使用 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 结构

微信小程序 抓包

采集方案策略之App抓包

结合项目来谈谈 Puppeteer

selenium-webdriver node库

Run Selenium tests with NodeJS | BrowserStack Docs

selenium-python

Wireshark

爬虫

crawler

爬虫实践

基于anyproxy的微信公众号文章爬取