В каком контексте $ eval & $$ eval выполняется в page / frame / elementHandle?

2

Это действительно для меня. Я не могу получить доступ к глобальной переменной внутри $$ eval(), а также не обращаться к другим модулям.

const util = require('util');
GlobalFlag=true;

.......

await page.$$eval(selector, (e) => { 
    console.log(e);
    GlobalFlag=false;
    console.log(util.inspect(e));
});

дает мне ошибку: Ошибка оценки: ReferenceError: util не определен

  • 1
    Вы не сможете получить доступ к util потому что это пакет Node. Скорее всего, это не нужно. Также неясно, для чего служит GlobalFlag в вашем случае.
Теги:
google-chrome-devtools
puppeteer

1 ответ

1
Лучший ответ

$eval оценивает функцию в контексте на стороне клиента. Он является строковым и вызывается с помощью eval. У него нет доступа к Node GlobalFlag потому что он не существует в глобальной области видимости браузера.

$eval и $$eval поддерживают дополнительные аргументы, которые будут переданы оцениваемой функции в случае, если там нужно прочитать переменную. Для записи в переменную значение должно быть возвращено из функции и назначено в контексте узла.

GlobalFlag = await page.$$eval(selector, (e) => { 
    console.log(JSON.stringify(e, null, 2));
    return false;
});
  • 0
    Я понял теперь. Так значит ли это, что я не могу даже сделать еще один eval - на elementHandle - на внутренней странице. $$ eval () ?
  • 0
    Похоже на это. Я думаю, это должно быть решено по-другому.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню