安装(前提安装谷歌浏览器)
- 创建一个项目目录,初始化,命令:
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