По умолчанию размер виртуального экрана 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");
Перед установкой агента пользователя:
После установки Firefox агента пользователя