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

puppteer page.$$eval 和 puppteer page.$eval

在 Puppeteer 中,page.$$eval 和 page.$eval 都是用于在页面中执行 JavaScript 代码的方法,但它们在作用范围和使用方式上有明显区别。以下是它们的详细对比和用法说明:

1. page.$eval(selector, pageFunction[, ...args])

作用
  • 选择 第一个 匹配 selector 的元素,并将该元素传递给 pageFunction 进行处理。

  • 适用于对 单个元素 进行操作或提取数据。

 

// 获取第一个 <h1> 的文本
const title = await page.$eval('h1', el => el.textContent);

// 获取第一个链接的 href
const firstLink = await page.$eval('a', a => a.href);

// 修改第一个输入框的值
await page.$eval('input', input => {
  input.value = 'New Value';
});

 

特点
  • 如果找不到匹配的元素,会抛出错误。

  • pageFunction 的参数 element 是单个 DOM 元素。

 

2. page.$$eval(selector, pageFunction[, ...args])

作用
  • 选择 所有 匹配 selector 的元素,并将这些元素的数组传递给 pageFunction 进行处理。

  • 适用于对 多个元素 进行批量操作或提取数据。

 

// 获取所有链接的文本
const allLinksText = await page.$$eval('a', links => {
  return links.map(a => a.textContent);
});

// 获取所有图片的 src 属性
const imageSources = await page.$$eval('img', imgs => {
  return imgs.map(img => img.src);
});

// 批量修改所有按钮的样式
await page.$$eval('button', buttons => {
  buttons.forEach(btn => {
    btn.style.backgroundColor = 'red';
  });
});

 

特点
  • 如果找不到匹配的元素,返回空数组 []

  • pageFunction 的参数 elements 是一个 DOM 元素数组。

核心区别对比

特性page.$evalpage.$$eval
选择范围第一个匹配的元素所有匹配的元素
返回值pageFunction 的单个返回值pageFunction 的数组或批量操作结果
未找到元素时抛出错误返回空数组 []
适用场景操作或提取单个元素的数据批量操作或提取多个元素的数据

 

http://www.lryc.cn/news/580446.html

相关文章:

  • 【数据结构】排序算法:归并与堆
  • HarmonyOS学习1---ArkTs语法
  • FPGA设计中的数据存储
  • json学习路线
  • C 中的 uintptr_t 类型
  • 深入解析享元模式:通过共享技术高效支持大量细粒度对象
  • ai 工程图相关论文集合
  • HarmonyOS:创建ArkTS卡片
  • HTML知识复习2
  • 汽车制造车间检测机器人与PLC无线以太网实时控制方案
  • 计算机技术的进阶之路:从基础到前沿的深度探索
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_timestamps
  • Oracle 高级 SQL 查询与函数详解:多表连接、子查询、聚合、分析函数
  • 3dmax一键烘焙很多张贴图合并成一张贴图插件支持fbx/obj/blender多材质模型合并为一张贴图
  • 光伏发电园区管理系统 - Three.js + Django 实现方案
  • SqueezeBERT:计算机视觉能为自然语言处理在高效神经网络方面带来哪些启示?
  • SQL 转 Java 实体类工具
  • 【内存】Linux 内核优化实战 - net.ipv4.tcp_max_tw_buckets
  • HarmonyOS学习2---Stage模型
  • 接口测试之apifox的使用
  • 在 Ubuntu 下配置 oh-my-posh —— 普通用户 + root 各自使用独立主题(共享可执行)
  • 常见高危端口风险分析与防护指南
  • java中,stream的filter和list的removeIf筛选速度比较
  • 【网络协议安全】任务12:二层物理和单臂路由及三层vlanif配置方法
  • Docker文件操作、数据卷、挂载
  • 猎板 PCB 微孔技术:构建 5G 通信设备高效运行的坚实底座
  • 冒泡和快速排序的区别
  • 【Note】《深入理解Linux内核》 第十八章:深入理解 ext2 与 ext3 文件系统
  • 人工智能-基础篇-18-什么是RAG(检索增强生成:知识库+向量化技术+大语言模型LLM整合的技术框架)
  • 2025使用VM虚拟机安装配置Macos苹果系统下Flutter开发环境保姆级教程--中篇