2017-01-19 8 views
2

Рассмотрим следующий код ...PhantomJS includeJs() + Уплотненный оценки() не работает

var page = require('webpage').create(); 
console.log('The default user agent is ' + page.settings.userAgent); 
page.settings.userAgent = 'Lisas headless browser'; 
page.open('http://www.httpuseragent.org', function(status) { 
    if (status !== 'success') 
    { 
     console.log('Unable to access network or site is down'); 
    }else{ 
     page.includeJs(
      // Include the https version, you can change this to http if you like. 
      'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', 
      function() { 
       (page.evaluate(function() { 
        // jQuery is loaded, now manipulate the DOM 
        console.log(document.getElementById('myagent').textContent); 
       })) 
      } 
     ); 
    } 
    phantom.exit(); 
}); 

Я пытаюсь получить некоторый код, который вставляет Собирается JQuery, а затем позволяет мне продолжать выполнять действия, но это не оценивает includeJs()

ответ

2

EDIT: Как отметил Vaviloff в комментарии ниже, вам необходимо подписаться на события «page.onConsoleMessage» для того, чтобы использовать console.log() внутри page.evaluate () Перезвони. Я обновил блок кода ниже, чтобы отразить это.

Следующий код будет захватывать текст пользовательского агента со страницы с помощью jQuery, а также отображать данные о том, что содержимое страницы было обработано.

var page = require('webpage').create(); 
console.log('The default user agent is ' + page.settings.userAgent); 
page.settings.userAgent = 'Lisas headless browser'; 
// simple 'page.onConsoleMessage' event handler 
page.onConsoleMessage = function (msg) { 
    console.log('page.onConsoleMessage'); 
    console.log(msg); 
}; 
page.open('http://www.httpuseragent.org', function(status) { 
    if (status === 'success') { 
    // capture the rendered page to 'before.jpg' 
    page.render('before.jpg'); 
    // load the jQuery library 
    page.includeJs(
     'http://code.jquery.com/jquery-1.8.2.min.js', 
     function() { 
     // jQuery is loaded, now manipulate the DOM 
     var agent = page.evaluate(function() { 
      // This code is executed within the loaded page 
      // get the user agent string 
      var text = $('#myagent').text(); 
      // log the text to the console 
      console.log('Inside page.evaluate ::', text); 
      // time for some mischief 
      $('#myagent').html('PhantomJS Strikes Again!'); 
      // return the text string 
      return text; 
     }); 
     // capture the evidence 
     page.render('after.jpg'); 
     // print the user agent text 
     console.log(agent); 
     // exit now 
     phantom.exit(0); 
     }); 
    } else { 
    console.log('Unable to access network or site is down'); 
    phantom.exit(1); 
    } 
}); 

Результирующий вывод на консоль:

The default user agent is Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.1.1 Safari/538.1 
page.onConsoleMessage 
Inside page.evaluate :: Your Http User Agent string is: Lisas headless browser 
Your Http User Agent string is: Lisas headless browser 
+3

Ну, на самом деле он может использовать console.log внутри page.evaluate. Просто нужно подписаться на сообщения с консоли с помощью [page.onConsoleMessage] (http://phantomjs.org/api/webpage/handler/on-console-message.html). – Vaviloff

+0

Спасибо. Я узнал что-то новое - я обновлю ответ. –