最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Puppeteer Get all data attribute values - Stack Overflow

programmeradmin1浏览0评论

My html doc is

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

How can I get all "data-thing" value (eg. ["abc1", "abc2", "abc3"]) inside div with class .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('')

  const data = await page.content();

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

My html doc is

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

How can I get all "data-thing" value (eg. ["abc1", "abc2", "abc3"]) inside div with class .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();
})();
Share Improve this question edited Apr 21, 2021 at 11:00 hardkoded 21.6k3 gold badges60 silver badges74 bronze badges asked Apr 22, 2019 at 15:48 sparklesparkle 7,40024 gold badges76 silver badges146 bronze badges
Add a comment  | 

2 Answers 2

Reset to default 14

You could use the page.$$eval function for that like this:

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

Explanation

What the page.$$eval function does (quote from the docs linked above):

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.

Therefore, it will first query the targeted divs and then map the divs to their data-* value by using the dataset property.

You can use the evaluate function

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

评论列表(0)

  1. 暂无评论