0

Я создаю простой веб-скребок для захвата данных с веб-сайта с помощью phantomjs. Это не работает для меня, когда я использовал querySelectorAll для получения контента, который я хочу. Вот мой весь код.PhantomJS querySelectorAll(). Textcontent ничего не возвращает

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

var url = 'https://www.google.com.kh/?gws_rd=cr,ssl&ei=iE7jV87UKsrF0gSDw4zAAg'; 

page.open(url, function(status){ 

    if(status === 'success'){ 

    var title = page.evaluate(function(){ 
     return document.querySelectorAll('.logo-subtext')[0].textContent; 
    }); 

    console.log(title); 
    } 
    phantom.exit(); 
}); 

Пожалуйста, помогите мне решить эту проблему.

Действительно спасибо.

ответ

1

По умолчанию размер виртуального экрана PhantomJS составляет 400x300.

var page = require('webpage').create(); 
console.log(page.viewportSize.width); 
console.log(page.viewportSize.height); 

Есть сайты, которые принимают к сведению, что и вместо обычной версии, которую вы видите в вашем браузере настольного компьютера они представляют мобильную, раздела версию HTML и CSS. Но мы можем исправить, установив нужный размер видового экрана:

page.viewportSize = { width: 1280, height: 800 }; 

Есть также сайты, которые UserAgent нюхать и принимать решения, основанные на этом. Если они не знают вашего браузера, они могут показать мобильную версию на безопасном месте, или если они не хотят быть соскабливаемыми, они могут отрицать связь с PhantomJS, потому что она честно заявляет о себе:

console.log(page.settings.userAgent); 

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/538.1 (KHTML, как Gecko) PhantomJS/2.1.1 Safari/538,1

Но можно установить желаемый агент пользователя:

page.settings.userAgent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0'; 

При работе с такими хрупкими вещами и веб-соскабливанием вы действительно должны обратить внимание на любые ошибки и системные сообщения, которые вы можете получить.

Так не PhantomJS сценарий не должен быть без OnError и onConsoleMessage обратных вызовов:

page.onError = function (msg, trace) { 
    var msgStack = ['ERROR: ' + msg]; 
    if (trace && trace.length) { 
     msgStack.push('TRACE:'); 
     trace.forEach(function(t) { 
     msgStack.push(' -> ' + t.file + ': ' + t.line + (t.function ? ' (in function "' + t.function +'")' : '')); 
     }); 
    } 
    console.log(msgStack.join('\n')); 
}; 

page.onConsoleMessage = function (msg) { 
    console.log(msg); 
}; 

Другой важный метод PhantomJS скриптов отладки делает скриншоты. Вы уверены, что PhantomJS видит то, что вы видите в Chrome?

page.render("google.com.png"); 

Перед установкой агента пользователя:

screenshot with native PhantomJS useragent

После установки Firefox агента пользователя

after setting Firefox useragent

Смежные вопросы