【JS|第23期】Puppeteer:网页自动化利器入门指南

日期:2024年8月15日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006

说在最前面:本文 vue3 的示例代码,在没有另外声名的情况下,均采用 <script setup> 组合式代码风格,风格统一,避免混乱,请各位新老食客放心食用哈 ^ _ ^



在这里插入图片描述


一、前言


在当今的互联网时代,网页自动化已经成为许多开发者、测试人员和数据分析师的必备技能。无论是进行自动化测试、网页截图、数据爬取还是模拟用户行为,Puppeteer 都是一个强大的工具。今天,我们就来深入了解一下 Puppeteer 是什么,以及如何使用它。

二、Puppeteer 是什么?


Puppeteer 是一个由 Google Chrome 团队维护的 Node.js 库,它提供了一组丰富的 API 来通过 DevTools 协议控制无头版(headless)或有界面版的 ChromeChromium 浏览器。Puppeteer 默认以无头模式运行,这意味着它可以在没有图形用户界面的情况下执行浏览器操作,但也可以配置为有界面的模式。Puppeteer 的名称来源于“木偶”,暗示了它能够方便地操纵浏览器进行各种自动化任务

Puppeteer 可以用于多种场景,包括但不限于:

  • 网页截图或生成网页截图或 PDF
  • 高级爬虫,用于爬取大量异步渲染内容的网页(如:单页应用程序 SPA
  • 模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试
  • 捕获站点的时间线,帮助分析网站性能问题

三、运行环境


  • Node.js 版本不能低于 v7.6.0,以支持 async/await
  • 安装 Puppeteer 时,系统会自动下载并安装最新的 ChromeDriver

四、如何使用 Puppeteer?


接下来,我们将通过几个步骤来学习如何安装并使用 Puppeteer

1、安装 Puppeteer

通过 npm 安装 Puppeteer 到你的项目中。

npm i puppeteer
# 或者
yarn add puppeteer

2、引入 Puppeteer

在你的 JavaScript 文件中引入 Puppeteer

const puppeteer = require('puppeteer');

3、创建浏览器实例

使用 puppeteer.launch() 方法启动一个浏览器实例。

const browser = await puppeteer.launch();

4、创建新页面

通过 browser.newPage() 方法创建一个新页面。

const page = await browser.newPage();

5、导航到页面

使用 page.goto() 方法导航到指定的 URL。

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

6、执行操作

使用 Puppeteer 提供的 API 执行各种操作,如截图、表单提交等。

7、关闭浏览器

完成操作后,不要忘记关闭浏览器,使用 browser.close() 方法关闭浏览器实例。

await browser.close();

五、完整示例


以下是一个简单的 Puppeteer 使用示例,打开 example 首页(此网站并不存在,仅用于演示使用,可改成自己想测试的网址),并生成网页截图:

const puppeteer = require('puppeteer');
const browserParams = {
      // 使用无头模式
      headless: false,
      // 页面最大化
      defaultViewport: {
        width: 0,
        height: 0,
      },
      args: [
        // 浏览器最大化
        "--start-maximized",
      ],
      // 创建Browser实例时传入 Chromium 可执行文件的路径
      executablePath: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
      // 超时时间,单位为毫秒
      timeout: 600000, 
    };

(async () => {
  // 启动浏览器实例
  const browser = await puppeteer.launch(browserParams);
  
  // 获取存在的页面
  async function getCurPage(){
    const pages = await browser.pages();
    let page = null;
    if(pages && pages.length>0){
      page = pages[0];
    }else{
      // 创建一个新页面
      page = await browser.newPage('https://example.com/');
    }
    return page;
  }
  const page = await getCurPage();
  
  // 生成网页截图
  await page.screenshot({path: 'example.png'});
  
  // 关闭浏览器
  await browser.close();
})(

六、常用操作


Puppeteer 提供了丰富的 API 来进行高级交互。以下是一些 Puppeteer 常用的操作及其语法和示例代码:

1. 启动浏览器和打开新页面

const puppeteer = require('puppeteer');
(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  // ...其他操作
  await browser.close();
})();

2. 访问网页

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

3. 元素选择和交互

// 选择元素
const element = await page.$('selector');
// 点击元素
await element.click();

// 指定元素点击(合体:选择元素+点击元素)
await page.click('selector');

4. 输入内容

const inputElement = await page.$('input#example');
await inputElement.type('Hello, World!');

// 指定元素输入内容(合体:选择元素+输入内容)
// Types instantly
await page.type('input#example', 'Hello'); 
// Types slower, like a user
await page.type('input#example', 'World', {delay: 100});

5. 获取元素文本

const text = await page.$eval('selector', el => el.innerText);

6. 获取属性值

const value = await page.$eval('selector', el => el.getAttribute('href'));

7. 截图

await page.screenshot({ path: 'screenshot.png' });

8. 等待元素出现

await page.waitForSelector('selector');

await page.waitForSelector('selector', { visible: true });

9. 执行自定义 JavaScript

const domcumentTitle = await page.evaluate(() => {
  // 在页面上下文中执行的代码
  return document.title;
});

10. 设置浏览器视口大小

// 宽1280 × 高720
await page.setViewport({ width: 1280, height: 720 });

// 全屏
await page.setViewport({ width: 0, height: 0 });

由于本文篇幅限制,更多实用操作,请看《Puppeteer:50个常用操作,你会了吗?》

七、结语


Puppeteer 的强大之处在于其灵活性和丰富的 API。通过本文的介绍,我们只是揭开了 Puppeteer 功能的冰山一角。想要更深入地了解和使用 Puppeteer,建议查阅其 《Puppeteer官方文档》,那里有更详细的教程和示例。

最后也是最重要的一点,在使用 Puppeteer 时,请各位务必遵守相关法律法规,不要用于非法爬取数据或者侵犯他人权益。正确地使用 Puppeteer,可以大大提高我们的工作效率,为我们的项目带来便利。


参考文章:


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/141219746

Puppeteer 是一个由 Google 开发的 Node.js 库,用于控制和自动化 Chrome 或 Chromium 浏览器。它可以用于网页截图,生成 PDF,模拟用户操作等。而 Vue 3 是一种流行的 JavaScript 框架,用于构建用户界面。 如果你想在 Puppeteer 中使用 Vue 3,你可以按照以下步骤进行操作: 1. 安装 Puppeteer:在终端中运行 `npm install puppeteer` 命令来安装 Puppeteer。 2. 创建 Puppeteer 实例:在你的代码中引入 Puppeteer,并创建一个 Puppeteer 实例,如下所示: ```javascript const puppeteer = require('puppeteer'); async function run() { const browser = await puppeteer.launch(); const page = await browser.newPage(); // 在这里编写你的 Puppeteer 代码 await browser.close(); } run(); ``` 3. 使用 Vue 3:在 Puppeteer 实例中的页面上加载你的 Vue 3 应用程序。你可以通过调用 `page.goto(url)` 方法来加载你的应用程序的 URL。例如: ```javascript const puppeteer = require('puppeteer'); async function run() { const browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto('https://example.com'); // 替换为你的 Vue 3 应用程序的 URL // 在这里编写与 Vue 3 的交互代码 await browser.close(); } run(); ``` 4. 与 Vue 3 进行交互:在 Puppeteer 实例中的页面上,你可以使用 Puppeteer 的 API 与 Vue 3 进行交互。你可以通过 `page.evaluate()` 方法执行 JavaScript 代码,并直接访问 Vue 3 应用程序的 DOM 元素。例如,你可以使用以下代码获取 Vue 3 应用程序的标题: ```javascript const title = await page.evaluate(() => { return document.title; }); console.log(title); // 输出 Vue 3 应用程序的标题 ``` 请记住,这只是 Puppeteer 与 Vue 3 的基本集成示例。具体的实现可能会根据你的需求而有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Commas.KM

码路共同进步,感恩一路有您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值