dhat
@dhat

PhantomJS — плохой выбор?

Начал разбираться с PhantomJS. Выполняю простейший скрипт:

var system = require('system');
var os = system.os;
var args = system.args;

var scriptName = args[0];
var name = args[1];
var url = args[2];

var page = require('webpage').create();
// ERROR HANDLING
var webPage = require('webpage');
var page = webPage.create();

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.error(msgStack.join('\n'));

};
// END

if(args.length === 2) {
  throw new Error('Name as system argument missing.');
}


console.log(
  'Hey ' + name + '.\n' +
  'You PC is ' + os.architecture + ' ' + os.name + os.version + '.\n' +
  'Executed: ' + scriptName + '.\n' +
  'Opening ' + url + '...'
);

page.open(url, function(status) {
  console.log('Status: ' + status);
  // Do other things here...

  page.viewportSize = {
    width: 1200,
    height: 1000
  };
  page.render('image1200.png');
  console.log('Rendered image: ' + url + '(1200px)');

  page.viewportSize = {
    width: 800,
    height: 1000
  };
  page.render('image800.png');
  console.log('Rendered image: ' + url + '(800px)');

  page.viewportSize = {
    width: 500,
    height: 1000
  };
  page.render('image500.png');
  console.log('Rendered image: ' + url + '(500px)');

  // EXIT
  phantom.exit();
});


Который просто заходит на сайт, и делаеть 3 скриншота с разным вьюпортом. Элементерно вроде? Так вот, захожу на bloomberg.com - и получаю загрузку проца под 100%, скрипт выполняется минуты 3 (лол!), в итоге скриншоты КРИВЫЕ.

Итого - на помойку отправлять или дальше разбиратся? Моя цель - найти инструмент для автоматизации некоторых действий на сайтах (например, регистрация, постинг в соц сетях и тд), а также веб-скрейпинг (те же странички в соц сетях, а также различные хтмл-таблицы).

Есть ли лучшие альтернативы для моих целей?
  • Вопрос задан
  • 4377 просмотров
Решения вопроса 1
alekciy
@alekciy
Вёбных дел мастер
PhantonJS не идеален конечно, но как скришотница вполне себе нормально работает. 3 минуты это конечно перебор, проблема явно где-то в написанном JS коде. Сделал 3 скрина (1200*1000, 800*1000, 500*1000)приведенной страницы, получилось где-то за ~7 секунд на каждый (при этом PhantomJS стоит на удаленной машине и сам ходит через прокси). Сама страница да, немного поплыла. Но это возможно, ведь базируется он на старом вебките. Если нужны скрины из самых последних версий браузеров, то тут конечно он может не подойти.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
fsockopen
@fsockopen
может из за этого?
page.viewportSize = {
    width: 1200,
    height: 1000
  };
  page.render('image1200.png');
  console.log('Rendered image: ' + url + '(1200px)');

  page.viewportSize = {
    width: 800,
    height: 1000
  };
  page.render('image800.png');
  console.log('Rendered image: ' + url + '(800px)');

  page.viewportSize = {
    width: 500,
    height: 1000
  };
  page.render('image500.png');
  console.log('Rendered image: ' + url + '(500px)');

может и не успеть обработать и перейти на другую строку
я думаю что надо обработчик повесить.например если первй скриншот удачно сохранился делать второй потом третий...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы