使用 puppeteer 将 ElementHandle 转换为 DOM 元素?
Converting an ElementHandle to a DOM element using puppeteer?
这就是我目前从 ElementHandle
中获取每个 DOM
属性 的方式:
let section: ElementHandle = await page.waitForSelector(".selector-list li");
let tagName = await section.$eval('a', (e) => e.tagName);
但这里是 tagName
。如果我想查看更多属性怎么办?
我不想为每个 属性 写 $eval
。
问题:
如何将 ElementHandle
转换为 Dom 对象,以便能够
浏览所有属性?
我想获得 A
作为 Dom 对象。
更好的方法是通过 page.evaluate 和 return 结果在页面上执行代码。这样你就可以 return 一个包含以下值的数组:
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
。
const elementHandle = await page.waitForSelector('.selector-list li')
elementHandle.evaluate((domElement) => {
domElement.tagName
// etc ...
})
打字稿:
const elementHandle: ElementHandle = await page.waitForSelector('.selector-list li')
elementHandle.evaluate((domElement) => {
domElement.tagName
// etc ...
})
这就是我目前从 ElementHandle
中获取每个 DOM
属性 的方式:
let section: ElementHandle = await page.waitForSelector(".selector-list li");
let tagName = await section.$eval('a', (e) => e.tagName);
但这里是 tagName
。如果我想查看更多属性怎么办?
我不想为每个 属性 写 $eval
。
问题:
如何将 ElementHandle
转换为 Dom 对象,以便能够
浏览所有属性?
我想获得 A
作为 Dom 对象。
更好的方法是通过 page.evaluate 和 return 结果在页面上执行代码。这样你就可以 return 一个包含以下值的数组:
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
。
const elementHandle = await page.waitForSelector('.selector-list li')
elementHandle.evaluate((domElement) => {
domElement.tagName
// etc ...
})
打字稿:
const elementHandle: ElementHandle = await page.waitForSelector('.selector-list li')
elementHandle.evaluate((domElement) => {
domElement.tagName
// etc ...
})