javascript - Puppeteer 中的 jsHandle 和 elementHandle 有什么区别?

标签 javascript node.js puppeteer

我一直在阅读 Puppeteer API 文档,他们有 jsHandle 和 elementHandle(他们说这是 jsHandle 的扩展)。

好像page.evaluateHandle page.$ page.$$这样的函数都可以返回jsHandle/elementHandle,这就像一个存在于页面中的对象。

那么我的问题是什么是 jsHandle/elementHandle,除了一个是另一个的扩展之外,两者之间还有什么区别?

最佳答案

The docs say :

class: JSHandle

JSHandle represents an in-page JavaScript object. JSHandles can be created with the page.evaluateHandle method.

const windowHandle = await page.evaluateHandle(() => window);

class: ElementHandle

extends: JSHandle

ElementHandle represents an in-page DOM element. ElementHandles can be created with the page.$ method.

const hrefElement = await page.$('a');

在 JavaScript 中,所有非基本类型都是对象。您可以在页面中引用的许多内容(例如上面示例中的 window)都是您可以获得 JSHandle 的对象。

如果您可以在网站上运行 native JavaScript 并获得对不是原始值的引用,尽管任何方法都是一个对象,它可能被包装在 Puppeteer 中的 JSHandle 中。

另一方面,ElementHandle 更为特殊。它代表一个元素。 HTMLElements 是对象,但并非所有对象都是 HTMLElements。您可以对元素(和 ElementHandle)执行一些对通用对象没有意义的方法。例如,给定一个 ElementHandle,您可以尝试在 Puppeteer 中使用 .$.$$ 选择它的后代。

关于javascript - Puppeteer 中的 jsHandle 和 elementHandle 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67259620/

相关文章:

Javascript 表格根据值绘制行

android - 未找到 react native 命令

javascript - Node HTTP 解析

javascript - Node 在暴露之前需要模块导致未定义

javascript - 如何在 puppeteer 中执行 __doPostBack 函数?

javascript - 在 Node 中遍历 page.evaluate

javascript - jquery 自动完成功能不适用于动态添加的输入框

javascript - 检测页面上的自动点击

javascript - 如何根据选择的选项获得对象?

javascript - MaxListenersExceededWarning : Possible EventEmitter memory leak dete