木偶操纵者如何获取元素标签名称

puppeteer howto get element 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.length1

哪里错了?

==========编辑==========

假设我事先已经有了 elements,如何从中得到 tagName

谢谢!

尝试使用 page.$eval 到 select 按钮,然后从按钮获取 tagName:

const tagName = await page.$eval('button', button => button.tagName);

如果您已经有一个像 elements[0] 这样的 elementHandle,您可以通过 page.evaluate:

传递该元素来获取该元素的属性
const tagName = await page.evaluate(
  element => element.tagName,
  elements[0]
);

您的 elements 似乎是 ElementHandle 的数组。

在那种情况下,可能有更直接的语法:

const tag_name = await (await elements[0].getProperty('tagName')).jsonValue()

这不涉及引用页面对象。

谢谢!