当前位置: 首页 > news >正文

【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);}

建议:

  • 使用显式等待
  • 避免点击过快导致请求丢失
http://www.jsqmd.com/news/258927/

相关文章:

  • 前端核心知识:Vue 3 编程的 10 个实用技巧
  • 太古里火锅风向标:成都口碑火锅,让你舌尖狂欢!美食/特色美食/社区火锅/烧菜火锅/火锅,成都火锅品牌排行 - 品牌推荐师
  • ssm424面向社区健康服务的医疗平台--论文
  • 数据结构:队列
  • 2026年压力容器法兰优选指南:这些厂家凭实力上榜,变压器法兰/非标法兰/不锈钢法兰/锻件,压力容器法兰工厂怎么选择 - 品牌推荐师
  • ssm428人体健康体检预约信息管理系统--论文
  • 【鸿蒙小程序】| 鸿蒙系统中的元服务创新与实践
  • 2026年电竞房家具定制厂商权威推荐榜:优选专业电竞/全屋定制/整体家居及多风格家具定制厂家 - 品牌推荐官
  • 零基础学AI大模型之Agent智能体
  • 虾皮开店需要押金吗?要交多少押金
  • 即插即用系列 | IEEE TMM 2025 SPDFusion:当语义分割成为图像融合的“导师”
  • AI的提示词专栏:小说创作 Prompt,人物设定、情节走向、对话写作
  • JBoltAI AI应用中台:重塑企业智能化的统一基座与范式
  • AI的提示词专栏:多模态 LLM(Vision-LLM)Prompt 语法
  • 全网最全9个AI论文平台,助你轻松搞定本科生论文!
  • 辽源市东丰东辽龙山西安区英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 导师严选2026一键生成论文工具TOP8:本科生毕业论文写作全攻略
  • 挂机放置类游戏开发学习 Part.3 UI布局
  • springboot+vue智慧养老手表管理系统 本系统共分为两个角色:家长,养老院管理员 功...
  • 2026年多级泵供应商权威推荐榜单:多级离心泵/污水泵/自吸泵/深井泵/化工泵源头厂家精选 - 品牌推荐官
  • 全栈贯通,实效为先:JBoltAI全栈能力集成的落地价值
  • sigmoid 函数详解(机器学习基础)
  • 使用PC浏览器devTool工具调试安卓手机h5页面
  • 赋能复杂业务自动化:JBoltAI 链式调用的控制结构设计
  • 2025年液体包装机厂家推荐榜:四川西德利自动化科技有限公司,丸剂包装机/粉剂包装机/枕式包装机/粉末包装机/圆角袋包装机/颗粒包装机/包装机/定量包装机/多列包装机厂家精选 - 品牌推荐官
  • Flutter OpenHarmony 适配:渐变按钮组件技术详解 - 教程
  • 学习进度 3
  • 2026线路板灌胶机厂家权威推荐榜单:环氧树脂灌胶机/硅胶灌胶机/手动灌胶机/半自动灌胶机/聚氨酯灌胶机源头厂家精选。 - 品牌推荐官
  • 通化市辉南柳河通化东昌二道江英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜 - 苏木2025
  • 2025年南京回收精密仪器公司权威推荐榜单:废金属收购/ 废金属回收 /高价废金属回收/ 废金属的回收 /废不锈钢废金属回收服务商精选 - 品牌推荐官