安装(前提安装谷歌浏览器)
- 创建一个项目目录,初始化,命令:
npm init一路回车 - 安装
npm i puppeteer-core - 为了方便安装一个插件
npm i chrome-finder
//node 执行js命令:node 文件名
//如果想保存后直接重新允许,用nodemon启动js
//nodemo安装命令:npm i nodemon -g
//启动命令:nodemon 文件名
const pptr=require('puppeteer-core');
const findChrome =require('chrome-finder');
const chromePath=findChrome();//用chrome-finder,浏览器查找谷歌浏览器exe文件位置
const main=async()=>{
//启动浏览器
const browser = await pptr.launch({
headless:false, //无头模式(后台运行模式),默认为true,为true时不显示浏览器
executablePath:chromePath, //谷歌浏览器exe文件的路径
defaultViewport:{ //设置页面可视区域的大小
width:1920,
height:1080
}
});
//打开新页面
const page=await browser.newPage();
//跳转到页面
await page.goto('https://www.baidu.com/');
//得到搜索输入框元素DOM
// $匹配一个元素
// const searchInput = await page.$('#kw');
// $$匹配多个元素
const searchInput = await page.$$('#kw');//得到一个ElementHandle数组
// console.log('---------',searchInput);
//向搜索输入框中 输入要搜索的内容
await searchInput[0].type('伏地魔',{delay:500});//delay:用来控制每个字符之间输入的时间间隔
//$evel 匹配某个元素,并在浏览器中执行传入的函数
//page.$eval(选择器,(ele)=>{要在浏览器中执行的函数})
await page.$eval('#kw',(ele)=>{
console.log('这里是浏览器执行的函数');
console.log('输入框目前输入的内容是:',ele.value);
});
//页面找到‘百度一下’按钮,并点击
await page.click('#su');
//等待5秒
await page.waitFor(1000);
//后退到上一个历史页面
// await page.goBack();
//前进到下一个历史页面
// await page.goForward();
//页面截屏
// await page.screenshot({
// path:'baidu.png',
// type:'png',
// fullPage:true
// })
//将网页截屏生成pdf(必须使用无头模式,否则无法生成pdf文件)
// await page.pdf({
// path:'baidu.pdf',
// format:'a4'
// })
//新增一个cookie
// await page.setCookie({
// name:'PPTR',
// value:'我是PPTR value'
// })
// //删除某个cookie
// await page.deleteCookie({name:'PPTR'});
// //获取当前所有的cookie
// const cookie=await page.cookies();
// console.log('cookies:',cookie);
//得到页面标题
let pageTitle= await page.title();
console.log('页面标题:',pageTitle);
//得到当前页面的url
let url=await page.url();
console.log('url:',url);
//获取当前页面的可视区域信息
let vp=await page.viewport()
console.log("vp:",vp);
//通过选择器找到元素,并把鼠标悬停在元素上面
await page.hover('#s_tab a');
//页面关闭
// await page.close();
//如果在页面A中做了一些操作以后弹出新页面B,可以将新页面B关闭后调用这个方法
//让浏览器返回页面A
// page.bringToFront()
//得到页面html完整代码
//const html_content=page.content();
// const html_content=await page.content();
// console.log(html_content);
//可触屏页面中,通过选择器找到元素位置,模拟人手触摸元素的中间
// await page.tap(selector);
//---- 按下虚拟键盘PageDown向下滚动一个页面 ---
// await page.keyboard.down("PageDown");
// await page.keyboard.press('PageDown');
// await page.keyboard.press('ArrowDown');
//---- 鼠标 ----
//移动鼠标到指定位置并点击
// await page.mouse.move(282,182);
await page.mouse.click(250,200,{clickCount:2})
}
main();
如果想保存后直接重新允许,用nodemon启动js
nodemo安装命令:npm i nodemon -g
启动命令:nodemon 文件名
参考:https://blog.csdn.net/nengsong111/article/details/119530641