puppeteer

puppeteer

基础用法

const moment = require('moment');
const puppeteer = require('puppeteer');
const chalk = require('chalk');
const log = console.log;


date = moment().locale('zh-cn').format('YYYY_MM_DD_HH_mm_ss');

log(chalk.bgGreen(date))

async function run () {

 const browser = await puppeteer.launch({
   
   args: ['--no-sandbox', '--disable-setuid-sandbox'],

});

 const page = await browser.newPage();

 await page.goto('https://www.baidu.com');

 await page.setViewport({

   width: 1200,

   height: 800

});

 //获取页面Dom对象

 let body = await page.$('#su');

 //调用页面内Dom对象的 screenshot 方法进行截图

 await body.screenshot({

   path: 'img/'+date+'_baiduyixia.png'

});

 await browser.close();

};

run();

获取input的value值

  // 点击元素
 // await page.waitFor(1000);
 await page.$eval('input#loginButton',input => input.click() );
 await page.waitFor(2000);
 // await page.goBack();

 //清空输入框的值
 await page.$eval('input#os_username',input => input.value='' );
 // 清空输入框的值,并且输入新的值
 await page.$eval('input#os_username',input => input.value='kelly' );


 //way 2
 await page.evaluate((a, b) => {
     document.querySelector('#a').value = a;
     document.querySelector('#b').value = b;
     document.querySelector('#c').click();
  }, a, b);

获取page的title

  var title = await page.title();
console.info(`标题是: ${title}`);

 console.log(page.url()); //https://example.org/
 console.log(typeof page.url()); //string

获取页面所有的href

  //获取所有url
const hrefs = await page.evaluate(
() => Array.from(document.querySelectorAll('a[href^="/page"]'), ({ href }) => href)
);

在Pupeteer Node.js中获取href属性 | Golang中国 - 码农俱乐部 - Go语言中文社区

 

UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.callFunctionOn): Target closed.

异步操作时,应该等待完成;添加 await;

UnhandledPromiseRejectionWarning:Error:协议错误(Runtime.CallFunctionOn):目标已关闭。 - 问答 - 云+社区 - 腾讯云

参考教程

puppeteer学习笔记(五)--API问题解决--使用功能强大的“ eval ”函数 - 掘金

上一篇:js数组拷贝


下一篇:C++学习 十四、类的进阶(6)返回对象