Можно ли передать функцию на страницу Puppeteer.evaluate () - PullRequest
1 голос
/ 21 сентября 2019

Я использую Puppeteer для анализа веб-страницы и не могу найти окончательный ответ на мой вопрос.

Я пытаюсь передать функцию в качестве аргумента page.evaluate() Объект в порядке, ноне могу передать функцию.Вот надуманный пример:

const obj = {
 thing: 'thing1',
};

const myfunction = () => {
 return `great ${stuff}`;
};

await page.evaluate((obj, function)=>{
 const thing = myfunction;
},(obj, function));

Можно ли передать функцию в качестве аргумента кукловодам page.evaluate ()?

1 Ответ

1 голос
/ 21 сентября 2019

Нет, вы не можете передавать такие функции.Переданные данные должны быть сериализованы через JSON.stringify, что невозможно для функций.

Альтернатива: выставить функцию

Для использованияфункция из вашей среды Node.js внутри страницы, вам нужно выставить ее через page.exposeFunction.При вызове функция выполняется в вашей среде Node.js

await page.exposeFunction('myfunction', text => `great ${text}`);
await page.evaluate(async (object) => {
  return await window.myfunction(object); // 'great example'
}, 'example');

Альтернатива: Определите функцию внутри page.evaluate

Чтобы использовать функцию в контексте страницыВы можете определить его внутри контекста.Таким образом, функция не имеет доступа к вашим переменным Node.js.

await page.evaluate((obj) => {
  const myfunction = (stuff) => `great ${stuff}`;
  return myfunction(obj); // 'great example'
}, 'example');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...