
Puppeteer核心API速查手册thal项目最常用的10个爬虫方法【免费下载链接】thal项目地址: https://gitcode.com/gh_mirrors/tha/thalPuppeteer 是 Chrome 团队官方的无头浏览器工具也是当下最热门的网页爬虫与自动化测试框架。本文以开源项目thal为例——这是一个基于 Puppeteer Chrome Headless 的网页爬虫示例项目用 Node.js 登录 GitHub、搜索用户并提取邮箱——为你整理一份Puppeteer核心API速查手册聚焦爬虫开发中最常用的 10 个方法从启动浏览器、页面跳转到表单登录、数据提取与翻页遍历均配有 thal 项目中的真实代码片段。thal项目简介一份开箱即用的Puppeteer爬虫教程thal 的命名灵感来自巴基斯坦的 Thal 沙漠——如同在互联网这片沙海中搜寻数据。项目代码量很小却完整串联了爬虫开发的全部环节非常适合作为新手的第一份 Puppeteer 爬虫教程。项目主要文件一览文件作用index.js爬虫主程序串联全部 Puppeteer 核心APImodels/user.jsMongoDB 用户数据模型README.md从零开始的图文入门指南想要本地跑通项目先克隆仓库git clone https://gitcode.com/gh_mirrors/tha/thal cd thal npm install准备好 Node.js、MongoDB 与 Puppeteer 后运行node index.js即可一键启动爬虫。10个Puppeteer核心API速查表在深入代码之前先用一张速查表建立整体认知下文将逐一拆解序号Puppeteer核心API一句话用途1puppeteer.launch()启动无头浏览器实例2browser.newPage()新建一个页面标签3page.goto()跳转到指定 URL4page.screenshot()保存页面截图5page.type()向输入框键入文本6page.click()模拟鼠标点击7page.waitForNavigation()等待页面跳转完成8page.evaluate()在页面中执行 JS 并提取数据9page.waitFor()等待指定时间或元素10browser.close()关闭浏览器释放资源一、浏览器生命周期三件套launch、newPage、close任何 Puppeteer 爬虫都从「启动浏览器」开始到「关闭浏览器」结束这套生命周期组合是所有爬虫脚本的地基const browser await puppeteer.launch(); const page await browser.newPage(); // ... 爬虫逻辑 ... browser.close();puppeteer.launch()启动浏览器实例默认无头模式运行调试时传入{ headless: false }即可弹出浏览器窗口逐行观察爬虫行为。browser.newPage()创建新页面后续所有操作都基于 page 对象完成。browser.close()爬取结束后务必关闭浏览器否则会残留后台进程、浪费服务器资源。二、页面导航与等待goto、waitFor、waitForNavigation跳转与等待是爬虫的节奏器。页面加载是异步的还没渲染完就去操作 DOM必然会报错。thal 项目是这样处理节奏的await page.goto(https://github.com/login); await page.waitFor(2 * 1000); await page.click(BUTTON_SELECTOR); await page.waitForNavigation();page.goto(url)导航到目标页面爬虫旅程的起点。page.waitFor(ms)毫秒级固定延时适合等待搜索结果等异步内容渲染。page.waitForNavigation()等待一次完整的页面跳转通常在 click 提交表单后使用。三、一行代码实现Puppeteer页面截图screenshot截图是 Puppeteer 最直观的能力也是验证爬虫运行状态的神器。thal 项目用一行代码就把 GitHub 首页存成了本地图片await page.screenshot({ path: screenshots/github.png });正式爬取前先截图看一眼目标页面能快速确认页面是否正常加载、布局是否改变——这是 Puppeteer 爬虫开发中非常实用的调试习惯。四、自动登录表单type 与 click 组合拳很多网站的数据需要登录后才能看到这就轮到表单交互登场。thal 项目完整演示了 GitHub 自动登录流程await page.type(USERNAME_SELECTOR, CREDS.username); await page.type(PASSWORD_SELECTOR, CREDS.password); await page.click(BUTTON_SELECTOR); await page.waitForNavigation();page.type(selector, text)模拟键盘输入自动聚焦输入框并逐字键入内容。page.click(selector)模拟鼠标点击参数为元素选择器。选择器从哪来打开浏览器开发者工具右键目标元素选择 Copy → Copy selector 即可thal 项目正是这样操作的五、提取页面数据的核心page.evaluate()登录之后真正爬数据的时刻到了。page.evaluate()是 Puppeteer 爬虫中最重要的数据提取方法——它让你在页面上下文里执行 JavaScript再把结果返回给 Node.js 环境const users await page.evaluate((sInfo) { return Array.prototype.slice.apply(document.querySelectorAll(sInfo)) .map($el $el.innerText); }, USER_LIST_INFO_SELECTOR);thal 项目用它遍历 GitHub 搜索结果对每个用户条目逐一提取用户名和邮箱六、Puppeteer翻页爬取遍历全部结果页单页数据往往不够翻页遍历才能把整片沙海搜刮干净。thal 项目先解析搜索结果总数再按每页 10 条计算总页数最后循环翻页async function getNumPages(page) { let inner await page.evaluate(sel document.querySelector(sel).innerHTML, NUM_USER_SELECTOR); return Math.ceil(parseInt(inner.replace(,, )) / 10); } for (let h 1; h numPages; h) { await page.goto(${searchUrl}p${h}); // 每页执行一次数据提取与保存 }翻页前先解析页面顶部的总数统计是判断还有没有下一页的通用套路爬取到的数据还会通过 models/user.js 中的 Mongoose 模型配合findOneAndUpdate去重写入 MongoDB避免重复入库——这也是 thal 项目展示的完整数据落地方案。七、爬虫防封号如何应对反爬机制高频爬取必然引来反爬机制。thal 项目的 README 里就记录了一次真实的翻车现场——GitHub 直接弹出了拦截警告页三点防封号建议控制请求频率在翻页之间加入随机延时避免固定节奏被识别为机器人。提前规划翻页范围GitHub 只允许访问前 100 页超过即返回 404遍历上限要心中有数。部署前去调试化发布到服务器时记得去掉headless: false无头模式更省资源也更隐蔽。总结用thal项目吃透Puppeteer核心API10 个方法一条完整的爬虫链路launch → newPage → goto → type → click → waitForNavigation → evaluate → waitFor → screenshot → close这就是 Puppeteer 爬虫的核心心法。想边看边练README.md 提供了完整的图文讲解index.js 里是全部可运行代码。从克隆 thal 项目开始动手跑通你的第一个 Puppeteer 爬虫吧【免费下载链接】thal项目地址: https://gitcode.com/gh_mirrors/tha/thal创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考