Nano Hash - криптовалюты, майнинг, программирование

Как выполнить page.render внутри page.evaluate?

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

Я пробовал что-то вроде этого:

page.evaluate(page, function (page, phantom) {

    //do some stuff on my page

    //i want to execute this in an eventhandler of my page though thats not the problem
    page.render('imgName.png'); 
    page.render('pdfName.pdf');
    phantom.exit();

}, page, phantom);

В моем примере это не работает, потому что page.render кажется неопределенным. Может быть, есть сериализатор для аргументов, который не сериализует функции объекта?

Это вообще возможно? Кто-нибудь знает решение моей проблемы?

Я знаю, что могу установить цикл while в моей функции оценки и предотвратить ее завершение, а затем выполнить рендеринг этой страницы снаружи. Хотя мне это не нравится.

02.10.2014

  • Отличный вопрос и отличный ответ. Спасибо! 31.01.2017

Ответы:


1

page.evaluate() находится в песочнице. Функция, которую вы передаете, оценивается в контексте страницы, и все аргументы должны быть сериализуемыми для успешной передачи. Вы не можете передавать page или phantom в контекст страницы. В документах говорится следующее:

Примечание. Аргументы и возвращаемое значение функции evaluate должны быть простым примитивным объектом. Эмпирическое правило: если его можно сериализовать через JSON, то все в порядке.

Замыкания, функции, узлы DOM и т. д. не будут работать!

Вот для чего предназначен page.onCallback:

page.onCallback = function(data){
    if (data.exit) {
        page.render('imgName.png'); 
        page.render('pdfName.pdf');
        phantom.exit();
    }
};
page.evaluate(page, function () {
    //do some stuff on my page

    //i want to execute this in an eventhandler of my page though thats not the problem
    window.callPhantom({ exit: true });
});
02.10.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..