如何与剧作家一起获得元素集合?

How to get a collection of elements with 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);
    });

节点 v.12.16.1

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

  • 供剧作家使用:await page.$$(selector);

如已接受的答案中所述,您可以使用 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

还有另一种处理元素列表的方法,您可以从文档中阅读。我更喜欢它 https://playwright.dev/docs/locators#lists

所以您只需 select 使用 page.locator 之后,您可以使用 for 循环与每个元素进行交互,或者 select 使用 .nth()