美文网首页
puppeteer实践总结

puppeteer实践总结

作者: 草珊瑚_6557 | 来源:发表于2020-09-09 18:59 被阅读0次

    基本环境信息

    "puppeteer-core": "^5.2.1"
    "puppeteer": "^1.20.0"
    macOS Mojave 10.14.1
    Chrome85

    基本的浏览器设置

    const browser = await puppeteer.launch({
        // 忽略https授权错误
        ignoreHTTPSErrors: true,
        // 打开浏览器
        headless: false, 
        slowMo: 50, defaultViewport: null, args: [
          '--window-size=1920,1080',
          '--disable-extensions',
          '--auto-open-devtools-for-tabs',
          // '--disable-gpu-sandbox',
          // '–single-process',
          // '–-disable-gpu=true',
          // '–-disable-dev-shm-usage',
          // '–-disable-setuid-sandbox',
          // '–-no-first-run',
          // '–-no-sandbox',
          // '–-no-zygote',
          // '–-single-process'
        ]
      });
    
      // 仅打开目标页
      const page = (await browser.pages())[0];
    

    指定chrome程序

    const browser = await puppeteer.launch({
        executablePath: 'chrome执行程序路径'
    }))
    

    指定chrome用户文件夹

    方法一:

    const browser = await puppeteer.launch({headless:false, 
    userDataDir:'/test',
    });
    

    注意:puppeteer会在你指定的userDataDir路径下再生成Default文件夹,并也就是说此时你的用户文件夹为/test/Default,用来存储用户信息。

    方法二:
    使用chrome的启动参数。

    const browser = await puppeteer.launch({
      headless:false, 
      args:[
        '--user-data-dir=/Users//Library/Application Support/Google/Chrome/',
        '--profile-directory=Profile 1',
      ]
    });
    

    这个方式可以完全指定用户文件夹来启动Chrome。
    注意:自用的chrome浏览器往往存在多个用户。一旦自用的chrome已经在使用,再使用puppeteer启动同个chrome会报这个错误:
    (node:80200) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!

    PS:查看chrome用户的个人资料路径或者chrome程序自身位置可以在浏览器地址栏输入chrome://version/

    屏蔽指定类型资源的请求

    const blockTypes = new Set(['image', 'media', 'font'])
    await page.setRequestInterception(true)
    page.on('request', request => {
      const type = request.resourceType()
      const shouldBlock = blockedTypes.has(type)
      this.debug('onRequest', { type, shouldBlock })
      return shouldBlock ? request.abort() : request.continue()
    })
    

    上传文件

    // 点击 选择文件
    await page.waitFor(utilFun.random(1000, 3000));
    const upload_file = await page.$("input[type=file]");
    await upload_file.uploadFile("你的文件路径");
    
    

    更好的参考:https://zhuanlan.zhihu.com/p/76237595

    相关文章

      网友评论

          本文标题:puppeteer实践总结

          本文链接:https://www.haomeiwen.com/subject/cbujektx.html