2015-08-16 5 views
0

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

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

var page = require('webpage').create(); 

page.open('http://www.maccosmetics.com/product/13854/36182/Products/Makeup/Lips/Lipstick/Giambattista-Valli-Lipstick', function(status) { 
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { 
     waitFor(function() { 
      return page.evaluate(function() { 
       $('.product__price').is(':visible'); 
      }); 
     }, function(){ 
      search = page.evaluate(function() { 
       return $('.product__price').text(); 
      }); 
      console.log(search) 
     }); 
    }); 
    phantom.exit(); 
}); 

Я не знаю, что здесь происходит.

ответ

1

Это не показывает вам ничего, потому что вы выходите слишком рано. Все функции (кроме evaluate()), которые выполняют обратный вызов, являются асинхронными.

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

var page = require('webpage').create(); 

page.open('http://www.maccosmetics.com/product/13854/36182/Products/Makeup/Lips/Lipstick/Giambattista-Valli-Lipstick', function(status) { 
    page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() { 
     waitFor(function() { 
      return page.evaluate(function() { 
       $('.product__price').is(':visible'); 
      }); 
     }, function(){ 
      search = page.evaluate(function() { 
       return $('.product__price').text(); 
      }); 
      console.log(search); 
      phantom.exit(); 
     }); 
    }); 
}); 
Смежные вопросы