puppeteer

目录

  • 介绍
  • 启动方法
  • 功能一、爬虫
    • 优势
    • 如何实现
    • 爬虫小demo
  • 功能二、执行脚本
    • 百度搜索脚本demo
  • 功能三、获取cookie(这个只能是模拟浏览器当前进入网页的cookie不是平时用的下载的的浏览器的cookie)
  • 功能四、监控网页,进行性能分析

介绍

puppeteer是一个可以控制chrome的库,可以模拟一些交互行为。

启动方法

启动浏览器,然后打开一个页面,之后跳转到一个网址打开页面

// Launch the browserconst browser = await puppeteer.launch({ headless: "new" });// Create a pageconst page = await browser.newPage();// Go to your siteawait page.goto("https://www.baidu.com");

功能一、爬虫

优势

  1. 与普通爬虫相比它更简单,因为它用的是真实的chrome环境,不需要我们配置各种header的参数
  2. 它能等待js动态生成的内容之后进行爬虫
  3. 他能能够截图并保存为图片

如何实现

获取网页元素
这里用waitForSelector用选择器进行爬取,这边都是异步的函数,这也是puppeteer的优势,它可以等待一些动态变化之后再爬取

// Query for an element handle.const element = await page.waitForSelector("span.title-content-title");// Get the text content of the elementconst textContent = await page.evaluate((element) => element.textContent,element);

截图
保存图片用screenshot方法,保存pdf用pdf方法(而且pdf是带链接的)

await page.screenshot({path: "1.png",fullPage: true,});await page.pdf({path: "1.pdf",fullPage: true,});

爬虫小demo

let puppeteer = require("puppeteer");(async () => {// Launch the browserconst browser = await puppeteer.launch({ headless: "new" });// Create a pageconst page = await browser.newPage();// Go to your siteawait page.goto("https://www.baidu.com");// Query for an element handle.const element = await page.waitForSelector("span.title-content-title");// Get the text content of the elementconst textContent = await page.evaluate((element) => element.textContent,element);console.log(textContent);// Dispose of handleawait element.dispose();// Close browser.await browser.close();
})();

功能二、执行脚本

上面爬虫的那个evaluate方法就是执行脚本的方法,执行脚本之后可以返回一个值作为结果。

  const result = await page.evaluate(() => {// 在此处编写要执行的脚本return xxx;});

百度搜索脚本demo

  // 执行脚本const result = await page.evaluate(() => {// 在此处编写要执行的脚本let input = document.querySelector("input#kw");input.value = "nodejs教学";let search = document.querySelector("input#su");search.click();return "已搜索";});console.log(result); // 输出脚本执行结果// 等待两秒等待页面加载完成await page.waitForTimeout(2000);await page.screenshot({path: "nodejs.png",fullPage: true,});

结果生成的图片
在这里插入图片描述

功能三、获取cookie(这个只能是模拟浏览器当前进入网页的cookie不是平时用的下载的的浏览器的cookie)

let cookie = await page.cookies();

功能四、监控网页,进行性能分析

  // 跟踪// 启动跟踪await page.tracing.start({ path: "trace.json" });。。。。。。// 停止跟踪await page.tracing.stop();// 导出跟踪结果const tracingData = await page.tracing.export();// 保存跟踪结果为JSON文件require('fs').writeFileSync('trace.json', tracingData);

这里生成的json文件可以通过浏览器的F12里的性能里上传按钮上传,之后就能看到可视化的性能分析,结果图如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/104379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sshpass传输文件提示Host key verification failed.

1. sshpass功能简述 sshpass指令可用于A服务器向B服务器传输文件或执行某些指令。 2. 传输文件指令 基本传输命令:sshpass -p 远程服务器登录密码 scp 本地路径文件 远程服务器登录用户名远程服务器IP地址:远程服务器文件保存路径 示例: sshpass -p 1…

【EI会议征稿】第二届可再生能源与电气科技国际学术会议(ICREET 2023)

第二届可再生能源与电气科技国际学术会议(ICREET 2023) 2023 2nd International Conference on Renewable Energy and Electrical Technology 2020年中国可再生能源发电规模显著扩大,风力和太阳能发电均呈迅速增长趋势。中国大力推进能源低碳化,减少温…

C++学习——类成员的访问权限、类的封装

以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 总结 所谓类成员的访问权限,就是你能不能使用该类中的成员。 C通过 public(公有)、protected(受保护)、private&#xff…

4. redis排名系统之C++实战操作对比MySQL

一、MySQL实现方法 假设我们要设计一款排名系统,那必然要涉及到两大类数据:武器数据和非武器的通用数据,它他通常有一个共用的属性:那就是主键唯一的,例如玩家的数字编号,通常在MySQL中是自增的无符号整数…

RocketMQ的3种消息发送模式是什么?如何确保消息不丢失?

RocketMQ发送消息的三种模式分别是:同步发送、异步发送和单向发送。 1、同步发送模式(Sync) 发送方发送消息后会等待消息被成功发送到消息队列服务器并收到确认消息后才返回发送结果给调用方。这种模式下,发送方会阻塞等待Broke…

【交付高质量,用户高增长】-用户增长质量保证方法论 | 京东云技术团队

前言 俗话说,“测试是质量的守护者”,但单凭测试本身却远远不够。大多数情况下,测试像“一面镜子”,照出系统的面貌,给开发者提供修改代码的依据,这个“照镜子”的过程,就是质量评估的过程&…

利用Python分析金融交易中的滚动Z值

大家好,在不断演变的证券交易领域,能够利用数据和统计学的力量提供重要的优势。无论是预测未来价格、分析市场趋势,还是简单地评估特定证券的波动性,数据驱动的见解已经改变了交易者对证券市场的处理方式。这就是Z值的用途&#x…

STM32_PID通用算法增量式和位置式

STM32_PID通用算法增量式和位置式 前言: 此算法为入门级PID算法,调试好参数后可应用于温度控制、舵机控制、直流电机的转速控制和直流电机的角度控制等等,下面就以温度控制举例 pid.c #include "pid.h" #include "sensor.h&q…

数据结构:二叉排序树

什么是二叉排序树? 二叉排序树要么是空二叉树,要么具有如下特点: 二叉排序树中,如果其根结点有左子树,那么左子树上所有结点的值都小于根结点的值;二叉排序树中,如果其根结点有右子树&#xf…

电脑重做系统---win10

电脑重做系统---win10 前言制作启动U盘材料方法打开网址下载启动盘制作工具参照官方说明进行制作使用U盘重做系统 常用软件官网地址 前言 记得最早学习装电脑还是04年左右,最为一个啥也不知道的大一傻白胖,花了几百大洋在电脑版把了个“电脑组装与维修”…

一体化运维监控:提供全方位数据洞察

摘要:运维监控在数字化日益深入的今天变得至关重要。一体化运维监控管理平台脱颖而出,成为业界知名的数据采集与运维洞察方案提供商,为企业带来“看到一切”的全新体验。 正文: 在大数据时代的洪流中,企业不仅要面对数…

淘宝店铺商品评论数据采集,淘宝商品评论数据接口,淘宝API接口

采集淘宝店铺商品评论数据的方法如下: 进入主界面,选择"自定义任务"。将商品信息页的网址复制粘贴到网站输入框中,点击"保存设置"。将页面下拉到底部,点击"下一页"按钮,在右侧的操作提…

3. Windows下C++/MFC调用hiredis库操作redis示例

一、头文件目录 将之前下载和编译好的Redis目录拷贝到新建好的工程目录下面,再点击测试工程的右键/属性,点击C/常规,附加包含目录添加以下路径,注意如果原先有多个路径,在末尾处添加分号后再粘贴: 点击C/常…

在CentOS操作系统上使用yum安装/使用/卸载Docker容器引擎

前言 简单记录一下如何在CentOS操作系统上安装、使用、卸载Docker容器引擎,以及配置Docker镜像加速地址。 一、在CentOS操作系统上安装Docker容器引擎 (1)首先更新yum软件包索引 yum check-update(2)安装yum软件包管…

vue引入jQuery

配置 下载 npm install jquery --save在build的webpack.base.conf中 var webpackrequire("webpack")在module.exports中: plugins: [ //   new webpack.optimize.CommonsChunkPlugin(common.js),new webpack.ProvidePlugin({jQuery: "jquery",$: &quo…

chapter8 Dimensionality Reduction(降维)

设置 首先,确保代码在python2和python3中都能正常工作,导入一些通用模块,确保MatplotLib以内联方式绘制图形,并准备一个函数来保存这些图形: from __future__ import division,print_function,unicode_literalsimport numpy as …

微服务13-Seata的四种分布式事务模式

文章目录 XA模式实现XA模式 AT模式AT模式的脏写问题(对同数据并发写的问题)其他事务不获取全局锁的一个情况(AT模式写隔离的实现)实现AT模式 TCC模式TCC实现我们怎么样去判断是否空回滚和业务悬挂?业务分析 Saga模式总…

【学习笔记】项目进行过程中遇到有关composer的问题

composer.json内容详解 以项目中的composer.json为例,参考文档。 name:composer包名type:包的类型,project和library两种keywords:关键词,方便别人在安装时通过关键词检索(没试过,好…

Java 中 Volatile 关键字

基本概念 补充一下 java 内存模型中的 可见性、原子性和有序性 可见性: 指的是线程之间的可见性,一个线程修改的状态对另一个线程是可见的。也就是一个线程修改的结果,另一个线程马上可以看到。比如 :用 volatile 修饰的变量&am…

froeach迭代删除和List迭代删除问题

场景:我有一个 List<ISSLogMessage> records 数据,需要从里面删除指定内容数据 第一次写成 foreach(var item in records) {if (item.logMessage.Contains("上传通行记录"))records.Remove(item); } 直接报错,因为foreach 是个迭代器 直接移除它的对象会报…