news 2026/8/16 10:52:03

【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/7/27 23:30:35

embedding模型 和 LLM模型 区别详细分析

这是一个非常重要且基础的问题。简单来说&#xff0c;Embedding模型是“理解者”和“编码者”&#xff0c;而LLM模型是“思考者”和“生成者”。 它们是完全不同功能、不同架构的两种模型&#xff0c;但常常协同工作。 下面通过一个详细的对比表格和比喻来解析&#xff1a; 核心…

作者头像 李华
网站建设 2026/8/11 1:43:02

全网最全9个AI论文平台,助你轻松搞定本科生论文!

全网最全9个AI论文平台&#xff0c;助你轻松搞定本科生论文&#xff01; AI工具如何让论文写作不再难 在当前的学术环境中&#xff0c;越来越多的学生开始借助AI工具来提升论文写作的效率与质量。这些工具不仅能够帮助学生快速生成初稿、优化语言表达&#xff0c;还能有效降低A…

作者头像 李华
网站建设 2026/8/5 11:36:27

【数据分析】基于 RANSAC算法的鲁棒直线拟合实现附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

作者头像 李华
网站建设 2026/8/14 21:28:30

前端基础知识

前端基础知识完整梳理&#xff08;2026年实用版&#xff09; 适合0-2年前端从业者快速查漏补缺 / 面试复习 / 自学路线规划 一、前端知识体系层级图&#xff08;2026主流认知&#xff09; ┌──────────────────────────────┐ │ 浏览…

作者头像 李华
网站建设 2026/8/9 18:48:14

警惕新型网络攻击:伪装ChatGPT指令传播MacStealer恶意软件

仅限会员阅读 网络攻击警告&#xff1a;MacStealer恶意软件通过伪造ChatGPT指令传播 AI前沿观察 关注 | 阅读时间约2分钟 3天前发布 请按回车键或点击查看完整图片 安全研究人员发现&#xff0c;攻击者正在利用ChatGPT诱骗Mac用户将命令行粘贴到终端中&#xff0c;从而安装恶意…

作者头像 李华