puppeteer 学习笔记
安装
sh
yarn add puppeteer
# OR
yarn add puppeteer-core
puppeteer-core
版本不会额外下载一个 Chromium
(安装贼慢),同时会忽略所有 PUPPETEER_ * env
变量
API 用法记录
js
import puppeteer from 'puppeteer-core'
;(async () => {
try {
// 打开浏览器
const browser = await puppeteer.launch({
// 手动指定浏览器执行文件地址(puppeteer-core 版本必须手动指定)
executablePath:
'/Applications/Google Chrome.app/Contents/MacOS/Google Chrome',
// 是否以无头模式运行浏览器
headless: false
})
// 打开新的标签页
const page = await browser.newPage()
// 在页面加载前修改某个属性
await page.evaluateOnNewDocument(() => {
/**
* 修改 navigator.webdriver 属性,防止反爬虫
* (如 boss 直聘会检测 puppeteer 一直 debug)
**/
Object.defineProperty(navigator, 'webdriver', {
get: () => undefined
})
})
// 跳转到指定 url
await page.goto('https://github.com/maomao1996')
// 获取页面 html
const html = await page.content()
// 获取指定 HTMLElement 对象( document.querySelector )
const nameEl = await page.$('.p-name.vcard-fullname')
// 获取指定 HTMLElement 的文本
const nameText = await page.$eval(
'.p-name.vcard-fullname',
(el) => el.innerText
)
console.log('nameText', nameText)
// 关闭标签页
await page.close()
// 关闭浏览器
await browser.close()
} catch (error) {
console.log('error', error)
}
})()