我想获取一个元素的tagName。在下面的示例中应为button
。
const puppeteer = require('puppeteer')
async function run () {
const browser = await puppeteer.launch({headless: false})
const page = await browser.newPage()
const html = `
<div>
<button type="button">click me</button>
<span>Some words.</span>
</div>
`
await page.setContent(html)
const elements = await page.$$('button')
const tagName = await elements[0].$eval('*', node => node.tagName)
console.log(tagName) // expect to be 'button'
await browser.close()
}
run()
错误消息说Error: failed to find element matching selector "*"
我可以说elements
匹配了一个元素,因为elements.length
是1
哪里出问题了?
===========编辑========
假设我已经有了elements
,以及如何从中取出tagName
。
谢谢!
答案 0 :(得分:1)
尝试使用page.$eval
选择按钮,然后从按钮获取tagName
:
const tagName = await page.$eval('button', button => button.tagName);
如果您已经拥有elementHandle
之类的elements[0]
,则可以通过将其传递到page.evaluate
来从该元素获取属性:
const tagName = await page.evaluate(
element => element.tagName,
elements[0]
);
答案 1 :(得分:1)
您的elements
似乎是ElementHandle
个数组。
在这种情况下,可能会有稍微更直接的语法:
const tag_name = await (await elements[0].getProperty('tagName')).jsonValue()
这不涉及引用页面对象。
谢谢!