使用puppeteer将ElementHandle转换为DOM元素?

时间:2018-10-30 21:00:48

标签: puppeteer

这是我目前如何从DOM获得每个ElementHandle属性的方式:

 let section: ElementHandle = await page.waitForSelector(".selector-list li");
 let tagName = await section.$eval('a', (e) => e.tagName);

但是这里是tagName。如果我想检查其他属性怎么办?

我不想为每个属性写$eval

问题:

如何将ElementHandle转换为Dom对象,所以我可以 浏览所有属性?    我想将A作为Dom对象。

2 个答案:

答案 0 :(得分:2)

更好的方法是通过page.evaluate在页面上执行代码并返回结果。这样,您可以返回具有值的数组:

const result = await page.evaluate(() => {
    const elements = document.querySelectorAll(".selector-list li");
    // do something with elements, like mapping elements to an attribute:
    return Array.from(elements).map(element => element.tagName);
});

result将是一个数组,每个元素的属性值为tagName

答案 1 :(得分:2)

使用ElementHandle.evaluate()

const elementHandle: ElementHandle = await page.waitForSelector('.selector-list li')

elementHandle.evaluate(domElement => {
    domElement.tagName  
    // etc ...
})