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)
);
UnhandledPromiseRejectionWarning: Error: Protocol error (Runtime.callFunctionOn): Target closed.
异步操作时,应该等待完成;添加 await;
UnhandledPromiseRejectionWarning:Error:协议错误(Runtime.CallFunctionOn):目标已关闭。 - 问答 - 云+社区 - 腾讯云
参考教程
puppeteer学习笔记(五)--API问题解决--使用功能强大的“ eval ”函数 - 掘金