news 2026/4/18 10:14:55

【Puppeteer 实战】自动登录后台并分页提取表格数据(含 50 条/页切换)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Puppeteer 实战】自动登录后台并分页提取表格数据(含 50 条/页切换)

本文通过一个完整示例,演示如何使用Puppeteer自动访问后台系统、设置 Cookie、切换分页大小,并循环点击「下一页」抓取所有表格 HTML 数据。


一、应用场景说明

在实际项目中,我们经常遇到以下需求:

  • 后台系统需要登录才能访问
  • 数据列表有分页,需要自动翻页
  • 希望批量抓取每一页的表格数据
  • 页面基于 Element UI(el-pagerbtn-next

本文将一步步实现:

✅ 打开后台页面
✅ 使用 Cookie 模拟登录
✅ 切换为50 条/页
✅ 自动计算总页数
✅ 循环点击「下一页」
✅ 抓取所有表格 HTML


二、环境准备

1. 安装 Puppeteer

npminstallpuppeteer

2. Node.js 版本

建议使用:

  • Node.js ≥ 14
  • Puppeteer ≥ 19

三、完整示例代码

下面是完整可运行的示例代码:

constpuppeteer=require('puppeteer');constfs=require('fs');// 封装一个延时方法functionwaitForTimeout(time){returnnewPromise(resolve=>setTimeout(resolve,time));}(async()=>{constbrowser=awaitpuppeteer.launch({headless:false// 关闭无头模式,方便调试});try{constpage=awaitbrowser.newPage();awaitpage.setViewport({width:1920,height:800});// 1. 进入后台登录页面awaitpage.goto('http://localhost:8093/admin');// 2. 设置登录 Cookie(模拟已登录)constcookies=[{name:'Admin-Token',value:'你的 token',domain:'localhost',path:'/'}];// 如果需要启用 Cookie,取消注释// await page.setCookie(...cookies);// 3. 跳转到数据列表页awaitpage.goto('http://localhost:8093/category');// 4. 切换分页大小为 50 条/页constpageSizeXPath='//span[text()="50条/页"]';awaitpage.waitForXPath(pageSizeXPath);const[pageSizeBtn]=awaitpage.$x(pageSizeXPath);if(pageSizeBtn){awaitpageSizeBtn.evaluate(el=>el.click());console.log('已切换为 50 条/页');}// 5. 获取总页数awaitpage.waitForSelector('ul.el-pager');constliElements=awaitpage.$$('ul.el-pager li');constlastLi=liElements[liElements.length-1];lettotalPages=1;if(lastLi){totalPages=parseInt(awaitpage.evaluate(li=>li.textContent,lastLi));console.log('总页数:',totalPages);}// 6. 循环点击下一页并抓取表格consttableSelector='table';constnextBtnSelector='button.btn-next';awaitpage.waitForSelector(nextBtnSelector,{visible:true});letcurrentPage=1;letallTableHTML='';while(currentPage<=totalPages){console.log(`正在抓取第${currentPage}`);// 抓取当前页表格consttables=awaitpage.$$(tableSelector);for(consttableoftables){consthtml=awaittable.evaluate(el=>el.outerHTML);allTableHTML+=html+'\n\n';}// 点击下一页constnextBtn=awaitpage.$(nextBtnSelector);if(!nextBtn)break;awaitnextBtn.click();awaitwaitForTimeout(3000);currentPage++;}console.log('分页抓取完成');// 7. 可选:保存为 HTML 文件fs.writeFileSync('tables.html',allTableHTML,'utf-8');console.log('表格 HTML 已保存到 tables.html');// await browser.close();}catch(e){console.error('发生错误:',e);}})();

四、关键代码讲解

1️⃣ 模拟登录(Cookie)

awaitpage.setCookie({name:'Admin-Token',value:'xxx',domain:'localhost',path:'/'});

适用于:

  • 后台 token 登录
  • 无需输入账号密码
  • 常见于 Vue / Element UI 项目

2️⃣ XPath 精准点击「50条/页」

constxpath='//span[text()="50条/页"]';const[el]=awaitpage.$x(xpath);awaitel.evaluate(e=>e.click());

优点:

  • 不依赖 class
  • 文本唯一即可定位

3️⃣ 获取 Element UI 总页数

ul.el-pager li:last-child

Element UI 的分页结构非常规整,最后一个li就是最大页数。


4️⃣ 自动翻页核心逻辑

while(currentPage<=totalPages){awaitnextBtn.click();awaitwaitForTimeout(3000);}

建议:

  • 使用显式等待
  • 避免点击过快导致请求丢失
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 3:51:44

基于SpringBoot+Vue技术的菜谱交流平台的设计与实现

基于Spring Boot Vue技术的菜谱交流平台的设计与实现 引言 菜谱交流平台是一个典型的社交与内容分享应用&#xff0c;旨在让用户分享、学习和讨论各种菜谱&#xff0c;促进厨艺爱好者之间的互动。该平台采用前后端分离架构&#xff0c;后端使用Spring Boot&#xff08;高效、…

作者头像 李华
网站建设 2026/4/18 3:52:15

基于深度学习yolov8的智能车牌识别系统设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于深度学习yolov8的智能车牌识别系统设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 如今智能交通系统中的车牌识别技术被广泛使用&#xff0c;在交通管制、监控安防、智能泊车等方面都有着良好的应用前景。但是传统车…

作者头像 李华
网站建设 2026/4/17 19:51:49

基于YOLOv8+pyqt5的火焰烟雾检测系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于YOLOv8pyqt5的火焰烟雾检测系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 基于YOLOv8pyqt5的火焰烟雾检测系统&#xff0c;标价即售价内含21527张火焰烟雾数据集包含smoke&#xff0c;fire&#xff0c;2类也可自行替…

作者头像 李华
网站建设 2026/4/18 8:51:46

JavaEE要想学得好,【Java spring】少不了,稳扎稳打学JavaEE

JavaEE要想学得好&#xff0c;【Spring全家桶】绝对少不了&#xff01; 稳扎稳打学JavaEE的正确姿势&#xff08;2026年最实用路线&#xff09; 一句话总结当前真实情况&#xff1a; JavaEE ≠ Servlet JSP 了 现在的JavaEE ≈ Spring全家桶 云原生 分布式技术栈 绝大多数…

作者头像 李华
网站建设 2026/4/16 12:48:17

基于 Spring Boot 的 Web 三大核心交互案例精讲

基于 Spring Boot 的 Web 三大核心交互案例精讲 &#xff08;2026年最实用写法 企业真实场景&#xff09; 在 Spring Boot Web 开发中&#xff0c;真正决定项目质量和维护难度的&#xff0c;往往不是写了多少 Controller&#xff0c;而是你是否真正掌握了以下三大核心交互场景…

作者头像 李华