Puppeteer 获取所有数据属性值

Puppeteer Get all data attribute values

我的 html 医生是

<div class="inner-column">
 <div data-thing="abc1"></div>
 <div data-thing="abc2"></div>
 <div data-thing="abc3"></div>
</div>

如何使用 [=21= 在 div 中获取所有 "data-thing" 值(例如 ["abc1"、"abc2"、"abc3"]) ] .inner-column?

const puppeteer = require('puppeteer');
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  page.setViewport({width: 1440, height: 1200})
  await page.goto('https://www.example.com')

  const data = await page.content();

  await browser.close();
})();

您可以使用evaluate函数

const data = await page.evaluate(() => 
  Array.from(document.querySelectorAll(".inner-column DIV")).map(d => d.getAttribute("data-thing"))
)

您可以像这样使用 page.$$eval 函数:

const dataValues = await page.$$eval(
    '.inner-column div',
    divs => divs.map(div => div.dataset.thing)
);

说明

page.$$eval 函数的作用(引用上面链接的文档):

This method runs Array.from(document.querySelectorAll(selector)) within the page and passes it as the first argument to pageFunction.

If pageFunction returns a Promise, then page.$$eval would wait for the promise to resolve and return its value.

因此,它将首先查询目标div,然后使用dataset 属性.

将div映射到它们的data-*值。