木偶如何获取元素tagName

时间:2019-01-04 08:53:14

标签: node.js puppeteer

我想获取一个元素的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

谢谢!

2 个答案:

答案 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()

这不涉及引用页面对象。

谢谢!