zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/zyfeng/p/13624986.html
Copyright © 2011-2022 走看看