nodeId到Element句柄

时间:2019-05-20 18:35:51

标签: puppeteer

是否有一些优雅的方法如何从nodeId获取元素句柄?我得到所有节点的列表(和nodeIds),

const nodes = await page._client.send("DOM.querySelectorAll", {
  nodeId: doc.root.nodeId,
  selector: "*"
});

其中nodes.nodeIds是整数列表。而我想以某种方式运行

const html = await page.$eval(nodeId, node => node.offsetParent === null);

检查元素是否可见。问题是page.$eval期望将字符串(选择器)作为第一个参数。

我可以通过DOM.setAttributeValue添加一个自定义属性,然后通过page.$eval进行查询,但这似乎很麻烦。那么,从devtool-protocol的nodeId到Puppeteer的ElementHandle有没有更直接的方法呢?

1 个答案:

答案 0 :(得分:0)

因此,有一种方法可以将人偶从ElementHandle转到nodeId

const element = page.$('a');
const node = await page._client.send("DOM.requestNode", {
  objectId: element._remoteObject.objectId
});
// <- { nodeId: 1 } 

我最初的问题要求另一个方向(nodeId-> ElementHandle),但是我可以解决这个问题。尽可能默认情况下默认使用Puppeteer也更实用。