puppeteer 使用

配置

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 $("a")

await page $$(selector) 返回document.querySelectorAll对象(数组格式),没有返回[ ]

await page.$$("a")

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)
原文地址:https://www.cnblogs.com/zyfeng/p/13624986.html