• 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)
  • 相关阅读:
    关于使用AWS的centos
    MySQL高可用配置(主从复制)
    tomcat+apache+jk
    Zabbix-1.8.14 安装
    centos6.5下,使用虚拟ftp用户
    java小数位-DecimalFormat(转)
    java collection 类图
    log4j详解(转)
    java强软弱虚引用详解(转载)
    Java深入理解文章(转载)
  • 原文地址:https://www.cnblogs.com/zyfeng/p/13624986.html
Copyright © 2020-2023  润新知