如何与剧作家一起获得元素集合?
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);
还有另一种处理元素列表的方法,您可以从文档中阅读。我更喜欢它
https://playwright.dev/docs/locators#lists
所以您只需 select 使用 page.locator 之后,您可以使用 for 循环与每个元素进行交互,或者 select 使用 .nth()
如何获取剧作家页面上的所有图片?
我只能用下面的代码得到一个(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);
还有另一种处理元素列表的方法,您可以从文档中阅读。我更喜欢它 https://playwright.dev/docs/locators#lists
所以您只需 select 使用 page.locator 之后,您可以使用 for 循环与每个元素进行交互,或者 select 使用 .nth()