Я использую Nightmare.js (v2.3.3) для автоматизации части моего рабочего процесса, когда мне нужно получить доступ к веб-сайту, который обновляет нашу базу данных. Мне удалось заставить Nightmare работать с основными вещами, такими как .type
, .click
и .screenshot
, чтобы подтвердить, что я обращаюсь к этим страницам и ввожу информацию, которую намеревался.
Где я застрял, а документации, похоже, не хватает, так это в использовании .evaluate
для извлечения информации со страницы. В документации это так:
.evaluate(fn [,arg1,arg2,...])
var selector = 'h1';
var text = yield nightmare
.evaluate(function (selector) {
// now we're executing inside the browser scope.
return document.querySelector(selector).innerText;
}, selector); // <-- that's how you pass parameters from Node scope to browser scope
Это все хорошо, но возможно ли пойти в обратном направлении и передать информацию из области браузера в область действия Node? Что я хотел бы сделать, так это вернуть все флажки на странице в виде массива, а затем прокрутить их в скрипте Nightmare.
Я также просмотрел множество вопросов GitHub и вопросов StackOverflow, чтобы найти ответ, и проблема, похоже, в том, что предыдущие версии были построены на PhantomJS, а v2+ использует Electron, поэтому трудно определить, какие ответы на самом деле все еще применимы к текущей версии. . Вот ответ, который показался мне понятным, но это было в 2014 году, поэтому я я думаю, что, скорее всего, это была версия PhantomJS. Для справки, это фрагмент, в котором, похоже, есть ответ о том, как перейти из браузера в область Node:
var p1=1,
p2 = 2;
nightmare
.evaluate( function(param1, param2){
//now we're executing inside the browser scope.
return param1 + param2;
}, function(result){
// now we're inside Node scope again
console.log( result);
}, p1, p2 // <-- that's how you pass parameters from Node scope to browser scope
) //end evaluate
.run();
Но не кажется, что текущая версия Nightmare поддерживает этот формат .evaluate(fn, cb, arg1, arg2,...)
?
Я просто хотел бы знать, возможно ли это, прежде чем я сойду с ума! Спасибо за любую помощь, пожалуйста, дайте мне знать, если вам нужна дополнительная информация, чтобы помочь ответить.
text
должно содержаться значение, которое было передано из контекста страницы в контекст узла, не так ли? Имеет ли это? - person Artjom B.   schedule 19.05.2016yield nightmare
просто запускает экземпляр кошмара, чтобы следовать цепочке инструкций. - person ryanjwessel   schedule 22.05.2016