PHP笔记网

革命尚未成功,同志仍须努力下载JDK17

作者:Albert.Wen  添加时间:2023-07-13 00:02:12  修改时间:2024-12-17 17:27:19  分类:03.数据采集/爬虫  编辑

安装(前提安装谷歌浏览器)

  1. 创建一个项目目录,初始化,命令:npm init  一路回车
  2. 安装 npm i puppeteer-core
  3. 为了方便安装一个插件 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