Невозможно прочитать свойство 'map' из неопределенного внешнего page.evaluate () - PullRequest
1 голос
/ 13 апреля 2019

Рассмотрим следующий фрагмент кода:

let foo = await page.evaluate(
  () => {
    let bar = [...document.querySelectorAll(".foobar")];
    return bar.map( (u) => u.textContent.trim() );
  }
);
foo.forEach( (u) => { console.log(u); });

Теперь рассмотрим этот вариант:

let bar = await page.evaluate(
  () => {
    return [...document.querySelectorAll(".foobar")];
  }
);
let foo = bar.map((u) => u.textContent.trim());
bar.forEach( (u) => { console.log(u); } );

Я ожидаю, что оба будут регистрировать одинаковые результаты, но на самом деле, пока первый работает нормальнопоследний бросает

Невозможно прочитать свойство 'map' из неопределенного

Может кто-нибудь объяснить, почему я не могу взять map() из page.evaluate()?

FWIW, page - это puppeteer NewPage().

1 Ответ

2 голосов
/ 13 апреля 2019

Функция, переданная в page.evaluate, сериализуется и отправляется по сети в браузер, где она затем выполняется.Это означает, что возвращаемое значение также должно быть отправлено по сети, и поэтому serialisable .Список элементов не сериализуем.

Как и , упомянутое в документации , если возвращаемое значение функции не сериализуемо, то вместо него возвращается undefined.

...