如何使用剧作家获取元素集合?

时间:2020-04-27 07:27:40

标签: javascript node.js web-scraping playwright

如何使用剧作家获取页面上的所有图像? 使用以下代码,我只能得到一个(ElementHandle),而不能得到一个集合。

const { chromium } = require("playwright");

class Parser {
  async parse(url) {
    const browser = await chromium.launch();
    const page = await browser.newPage();
    await page.goto(url);
    await page.waitFor("img");
    // TODO: get somehow collection of elements
    return await page.$("img");
  }
}

module.exports = Parser;

另一个模块中的某个地方很远:

const Parser = require("./path/to/dir/Parser.js");
const parser = new Parser();

parser
    .parse(body.url)
    .then(elemHandle => {
      // here I get only one ElementHandle object, but suppose to get an array or collection
    })
    .catch(err => {
      throw new Error(err);
    });

Node v.12.16.1

3 个答案:

答案 0 :(得分:5)

我已经找到答案了。需要使用page.$$(selector)而不是page.$(selector)来像document.querySelectorAll(selector)一样抓取。

答案 1 :(得分:1)

  • 供剧作家使用:等待页面。$$(selector);

答案 2 :(得分:1)

正如在他接受的答案中提到的,您可以使用 await page.$$(selector)。 这是一个link to the page.$$ official documentation

您也可以使用以下代码。

const result = await page.evaluate(selector => document.querySelectorAll(selector) , selector);

这是一个link to the page.evaluate official documentation