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();
})();
→ Ссылка