配置
page.setViewport: 设置视图大小
// 设置 浏览器视窗
await page.setViewport({
1300,
height: 938,
});
page.setUserAget: 设置UserAgent
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36');
page.SetCookie: 设置Cookie
const cookies = [{
'name': 'cookie1',
'value': 'val1'
},{
'name': 'cookie2',
'value': 'val2'
},{
'name': 'cookie3',
'value': 'val3'
}];
await page.setCookie(...cookies);
const cookiesSet = await page.cookies(url);
另外,也可以使用emulate函数提供快捷设置,puppeteer/DeviceDescriptors还提供了常用设备的预设
const puppeteer = require('puppeteer');
const devices = require('puppeteer/DeviceDescriptors');|
const iPhone = devices['iPhone 6'];
puppeteer.launch().then(async browser => {
const page = await browser.newPage();
await page.emulate(iPhone);
await page.goto('https://www.google.com');
// other actions...
await browser.close();
});
//除此之外,还可以使用page.setExtraHTTPHeaders设置其它HttpHeader
页面跳转
page.goto(url, options) 打开新页面
await page.goto('https://www.baidu.com', {
timeout: 30 * 1000,
waitUntil: [
'load', //等待 “load” 事件触发
'domcontentloaded', //等待 “domcontentloaded” 事件触发
'networkidle0', //在 500ms 内没有任何网络连接
'networkidle2' //在 500ms 内网络连接个数不超过 2 个
]
});
page.goBack(options) 回退到上一个页面
page.goForward(options) 前进到下一个页面
page.reload(options) 重新加载页面
page.waitForNavigation(options) 等待页面跳转
元素抓取
await page $(selector) 返回document.querySelector对象,没有返回null
await page $$(selector) 返回document.querySelectorAll对象(数组格式),没有返回[ ]
await page $eval(selector, pageFunction[,...args]) 获取单个元素属性
const searchValue = await page.$eval('#search', el => el.value);
const preloadHref = await page.$eval('link[rel=preload]', el => el.href);
const text = await page.$eval('.text', el => el.textContent);
const html = await page.$eval('.main-container',e => e.outerHTML);
const data-id = await page.$eval('a', e => e.getAttribute('data-id'));
await page $$eval(selector, pageFunction[,...args]) 获取多个元素属性,一般都是获取元素长度判断是否存在
const divLenth = await page.$$eval("div", e => e.length)