NodeJS 如何获得与剧作家的元素集合?

6xfqseft  于 2023-01-25  发布在  Node.js
关注(0)|答案(6)|浏览(124)

如何获得所有的图像在页面上的剧作家?我只能得到一个(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);
    });

节点版本12.16.1

sg2wtvxw

sg2wtvxw1#

还有另一种方法可以使用从文档中读取的元素列表,我更喜欢https://playwright.dev/docs/locators#lists
因此,您只需使用page.locator进行选择,然后,您可以使用for循环与每个元素进行交互,或者使用.nth()选择所需的元素

gajydyqb

gajydyqb2#

对于计数,当试图避免使用await page.$$(selector);时,另一种选择是直接使用LocatorAssertion:

await expect(locator).toHaveCount(n);

正式文件链接

y53ybaqx

y53ybaqx3#

Locator似乎是当前的前进方向,不鼓励使用page.$$(img)
改为用途:

const imageList = await page.locator('img);

计数:

const imageList = await page.locator('img');
console.log('images: ', await imageList.count());

有关https://playwright.dev/docs/locators的更多信息

g2ieeal7

g2ieeal74#

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

mklgxw1f

mklgxw1f5#

正如已接受的答案中提到的,您可以使用await page.$$(selector)。这里是该页面的链接。$$官方文档
也可以使用下面的代码。

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

这里有一个链接到该页面。评估官方文档

093gszye

093gszye6#

  • 供剧作家用途:等待页面。$$(选择器);

相关问题