page.evaluate() Как Передать несколько параметров в функцию?)
Получаю вот такую ошибку при использовании этой функции
Error: Too many arguments. If you need to pass more than 1 argument to the function wrap them in an object
async waitForValue(page, selector, value) {
const result = await page.evaluate(
(selector, value) =>
document.querySelector(selector).getAttribute('value').includes(value),
selector,
value,
)
console.log(result)
},
Ответы (1 шт):
Автор решения: Ein
→ Ссылка
Внезапно, нужно просто передать несколько аргументов.
Чуть-чуть изменённый пример из документации:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// (x, y, z) - приняли три аргумента
const result = await page.evaluate((x, y, z) => {
return Promise.resolve(x * y * z);
// 7, 8, 9 - передали три аргумента
}, 7, 8, 9);
console.log(result);
await browser.close();
})();
Что касается предстваленного вами кода, то он наводит на предположение о том, что присутсвует проблема XY, т.к. он отвечает на вопрос из заголовка. Но если на странице не окажется элемента подходяшего под передаваемый селектор, то document.querySelector(selector) вернёт null что в даст ошибку, т.к. null не имеет метода getAttribute.
Если передавать одним аргументом, как предлагается в ошибке:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Теперь всё внутри args
const result = await page.evaluate((args) => {
return Promise.resolve(args.x * args.y * args.z);
// Передали объектом
}, {x:7, y:8, z:9});
console.log(result);
await browser.close();
})();