puppeteer使用笔记

puppeteer的作用

1、生成页面的屏幕截图,和PDF。
2、爬取SPA(单页应用程序)并生成预渲染的内容(即“ SSR”(服务器端渲染))。
2、自动执行表单提交,UI测试,键盘输入等。
4、创建最新的自动化测试环境。使用最新的JavaScript和浏览器功能,直接在最新版本的Chrome中运行测试。
5、捕获站点的时间线跟踪以帮助诊断性能问题。
6、测试Chrome扩展程序。

初次使用,打开页面,并且截图

let puppeteer = require('puppeteer')

async function  test() {
  // puppeteer.launch 实例开始浏览器
  // 上面的方法可以传进去一个option对象, headless:false, 表示配置成有界面 , 可以配置为无界面浏览器,或者有界面浏览器
  // 无界面性能更高 有界面用于调试
  // 默认新创建的页面大小是800*600 可以使用 defaultViewport 中width和height 配置大小
  let options = { 
    headless:false,
    defaultViewport:{
      width:1400,
      height:800
    }
  }
  let browser = await puppeteer.launch( options )

  // 尝试打开网页 
  let page = await browser.newPage()   // 先创建一个新页面
  // 打开页面
  console.log(page);
  
  page.goto("http://www.baidu.com").then(res =>{
    console.log("成功");
    // 在上面打开的页面进行截图
    page.screenshot({path:"aa.png"})
  })
}
test()

使用选择器获取网页里面的内容

使用方法 两个$$eval 来获得多个选择器,一个代表只获取一个

let puppeteer = require('puppeteer')

async function  test() {
  let options = { 
    headless:false,
    defaultViewport:{
      width:1400,
      height:800
    }
  }
  let browser = await puppeteer.launch( options )
  let page = await browser.newPage()

  page.goto("https://www.dytt8.net/").then(res =>{
	// 使用方法 $$eval 
      page.$$eval("#menu li a",ele =>{
      ele.forEach(function (item,i){
        console.log(item.innerHTML);
      })
    }) 
  })
 // 监听 console方法的输出
 page.on("console",function (...arg){
    console.log(arg);
  }) 
} 
test()

获取input,并输入内容,并且点击

// 找到输入框
    inputEle = page.$('.searchl input[name="keyword"]')
    // 聚焦
    inputEle.focus()
    // 设置键盘输入内容
   page.keyboard.type("小丑")

    // 点击按钮
    btn = page.$('.searchl input[name="Submit"]')
    btn.click()

杂,乱

let puppeteer = require('puppeteer')
let axios = require('axios')
let url =require('url')
let httpUrl = 'https://sobooks.cc/';

// $代表拿到对象,如果要获得内容得话,就需要使用$eval
(async function aa(){
  let options = {
    defaultViewport:{
      width:1400,
      height:800
    },
    headless:false,
    slowMo:250
  }
  let browser = await puppeteer.launch( options )
  async function getNum(){
    let page =await browser.newPage()
    await page.goto(httpUrl)
    let pageNum = await page.$eval('.pagination li:last-child span',ele =>{
      // 进行text得初始化,不初始化无法访问
      let text = ele.innerHTML
      // substring 表示把前面和后面剪切去一些
      text = ele.innerHTML.substring(1,text.length-2).trim()
      return text
    })
    page.close()
    return pageNum
  }
  let num = await getNum()
  console.log(num);
  async function getObj(num){
    let page =await browser.newPage()
    let url = "https://sobooks.cc/page/"+num
    await page.goto(url)
    let arrPage = await page.$$eval('.card .card-item .thumb-img>a',ele =>{
      let arr = []
      ele.forEach( ele2=>{
        var obj = {
          title:ele2.getAttribute('title'),
          url:ele2.getAttribute('href')
        }
        arr.push(obj)
      })
      return arr
    })
    page.close()
    console.log();
    getInfo(arrPage[0].url) 
  } 
  getObj(1)
 async function getInfo(url){
   console.log(url);  
    let page =await browser.newPage()
    // 获取谷歌请求
    // await page.setRequestInterception(true);
    // 监听请求事件,并对请求事件进行拦截,为了使请求快速,效率高一点
    // page.on('request',interceptedRequest =>{
    //       // 对url模块对请求得地址进行解析
    //       let urlObj = url.parse(interceptedRequest.url())
    //       if (urlObj.hostname == 'goodlead.g.doubleclick.net') {
    //         // 如果是谷歌得广告请求,就放弃
    //         interceptedRequest.abort()
    //       }else{
    //         interceptedRequest.continue()
    //       }
    // });
    await page.goto(url)
    let eleA = await page.$('.dltable tr:nth-child(3) a:last-child')
    let Ahref = await eleA.getProperty('href')
  }  
})()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值