2015-12-10 1 views
0

Вызов следующего кода в узле 4.2.0 выполняется в задании cron узла, а не через терминал. Сайт, на который я запрашиваю, - http://www.milb.com/index.jsp?sid=t402.Узел 4.2.0 phantom stdout: NETWORK_ERR: XMLHttpRequest Exception 101: Произошла сетевая ошибка при синхронных запросах

module.exports.dynamicRequest = function(url, callback) { 
    var makeDynamicRequest = function(attempt) { 
    if (attempt === 4) { 
     svghost.delPhantom(); 
     return callback(new Error('Phantom had 3 failures')); 
    } 
    svghost.getPhantom(function(err, ph) { 
     if (err) { 
     console.log(err.stack); 
     setTimeout(function() { 
      ph.exit(); 
      svghost.delPhantom(); 
      attempt++; 
      makeDynamicRequest(attempt); 
     }, Math.pow(2, attempt) * 300); 
     } else { 
     ph.createPage(function(page) { 
      page.open(url, function(status) { 
      if (status === 'success') { 
       page.get('content', function(content) { 
       ph.exit(); 
       svghost.delPhantom(); 
       callback(null, content); 
       }); 
      } else { 
       ph.exit(); 
       svghost.delPhantom(); 
       setTimeout(function() { 
       attempt++; 
       makeDynamicRequest(attempt); 
       }, Math.pow(2, attempt) * 300); 
      } 
      }); 
     }); 
     } 
    }); 
    }; 
    makeDynamicRequest(1); 
}; 

svghost это простая фантом оболочка, которая рекурсивно пытается не создать объект фантомное пока успешно. Я уверен, что svghost не проблема. Это работает локально 100% времени, но я вижу эту ошибку, когда хрон работает на нашем сервере: phantom stdout: NETWORK_ERR: XMLHttpRequest Exception 101: A network error occurred in synchronous requests.

Вот трассировки стека:

phantom stdout: /srv/apps/scraper/node_modules/spoton/node_modules/phantom/shim.js:7608 in send 
/srv/apps/scraper/node_modules/spoton/node_modules/phantom/shim.js:7608 in _start 
/srv/apps/scraper/node_modules/spoton/node_modules/phantom/shim.js:7635 
+0

Посмотрите на [это] (https://github.com/amir20/phantomjs-node/issues/345), оно похоже связано и/или helpul. –

ответ

0

При создании фантом экземпляра с помощью phantom.create ты по должен добавить аргумент --web-security=no или использовать объект options и добавить к нему 'web-security':'no'.

Это привело бы к чему-то вроде этого:

phantom.create({'web-security':'no'}, callback...)

И ни ваш NETWORK_ERROR не должны исчезнуть

Смотрите эту stack или tihs github issue для получения дополнительной информации.

+0

Передача объекта не работает, но строка: 'phantom.create ('- web-security = no', function (ph) {...' (phantomjs 2.1.1). – medik

+0

@medik, возможно, не такая же версия больше? – rels

4

Я исправил эту ошибку, убедившись, что я установил более старую версию phantomjs. Я не видел ошибку при использовании phantomjs v1.9.8 и обнаружил ошибку при установке phantomjs v2.1.1. Установка v1.9.8 может быть выполнена с помощью npm install -g [email protected] , где опция -g будет установлена ​​по всему миру.

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