首页 > 语言 > JavaScript > 正文

爬虫利器Puppeteer实战

2024-05-06 15:43:24
字体:
来源:转载
供稿:网友

Puppeteer 介绍

Puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人。 Puppeteer 是一个 Nodejs 的库,支持调用 Chrome的API来操纵Web ,相比较 Selenium 或是 PhantomJs ,它最大的特点就是它的操作 Dom 可以完全在内存中进行模拟既在 V8 引擎中处理而不打开浏览器,而且关键是这个是Chrome团队在维护,会拥有更好的兼容性和前景。

Puppeteer 用处

利用网页生成PDF、图片 爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染) 可以从网站抓取内容 自动化表单提交、UI测试、键盘输入等 帮你创建一个最新的自动化测试环境(chrome),可以直接在此运行测试用例6.捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题

Puppeteer 使用

安装 Puppeteer

由于封网,直接下载 Chromium 会失败,可以先阻止下载 Chromium 然后再手动下载它

# 安装命令npm i puppeteer --save# 错误信息ERROR: Failed to download Chromium r515411! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.# 设置环境变量跳过下载 Chromiumset PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=1 # 或者可以这样干,只下载模块而不buildnpm i --save puppeteer --ignore-scripts# 成功安装模块+ puppeteer@0.13.0added 1 package in 1.77s

手动下载 Chromium,下载完后将压缩包解压,会有个 Chromium.app,将其放在你喜欢的目录下,例如 /Users/huqiyang/Documents/project/z/chromium/Chromium.app。正常安装包后 Chromium.app 会在 .local-chromium

Tip:下载 Chromium 失败解决办法

更换国内Chromium源

PUPPETEER_DOWNLOAD_HOST=https://storage.googleapis.com.cnpmjs.orgnpm i puppeteer

或者用 cnpm 安装

npm install -g cnpm --registry=https://registry.npm.taobao.orgcnpm i puppeteer

点击查阅 Puppeteer  API

初试 Puppeteer,截个图吧

知识点

puppeteer.launch 启动浏览器实例 browser.newPage()  创建一个新页面 page.goto 进入指定网页 page.screenshot 截图
const puppeteer = require('puppeteer');(async () => { const browser = await (puppeteer.launch({  // 若是手动下载的chromium需要指定chromium地址, 默认引用地址为 /项目目录/node_modules/puppeteer/.local-chromium/  executablePath: '/Users/huqiyang/Documents/project/z/chromium/Chromium.app/Contents/MacOS/Chromium',  //设置超时时间  timeout: 15000,  //如果是访问https页面 此属性会忽略https错误  ignoreHTTPSErrors: true,  // 打开开发者工具, 当此值为true时, headless总为false  devtools: false,  // 关闭headless模式, 不会打开浏览器  headless: false })); const page = await browser.newPage(); await page.goto('https://www.jianshu.com/u/40909ea33e50'); await page.screenshot({  path: 'jianshu.png',  type: 'png',  // quality: 100, 只对jpg有效  fullPage: true,  // 指定区域截图,clip和fullPage两者只能设置一个  // clip: {  //  x: 0,  //  y: 0,  //  width: 1000,  //  height: 40  // } }); browser.close();})();            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选