2014-11-24 2 views
0

Я развертываю приложение Zombiejs в Openshift, но Zombie, похоже, не может получить HTML.Zombiejs empty HTML

У меня есть объект (покерный), который поддерживает безгласный браузер и делает с ним что-то. Один из методов, называемый init, регистрируется на веб-сайте и возвращает «инициализированный» браузер.

Poker.prototype.init = function (email, password, ip) { 
    var self = this; 
    var browser; 

    // Have to use the ip that Openshift provides 
    // See SO question http://goo.gl/n2TfMC 
    if (ip) { 
    browser = Zombie.create({ 
     'localAddress': ip 
    }); 
    } else { 
    browser = Zombie.create(); 
    } 

    return new Promise(function (resolve, reject) { 
    browser 
     .visit('http://some.login/page') 
     .then(function() { 
     // Some debugging stuff :p 
     console.log('body: '); 
     console.log(browser.html('body')); 

     // Fill in the credentials 
     browser.fill('email', email); 
     browser.fill('password', password); 
     return browser.pressButton('Log In'); 
     }) 
     .done(function() { 
     // Logged in, new page loaded 
     // Check if login was successful 
     var title = browser.text('title'); 
     console.log(title); 
     }); 
    }); 
} 

Консоль остается пустой после печати body:, Анден зомби пытается заполнить адрес электронной почты, я получаю эту ошибку:

Possibly unhandled TypeError: Cannot use 'in' operator to search for 'compareDocumentPosition' in null 
    at /var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/node_modules/jsdom/node_modules/nwmatcher/src/nwmatcher-noqsa.js:267:43 
    at module.exports (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/node_modules/jsdom/node_modules/nwmatcher/src/nwmatcher-noqsa.js:37:7) 
    at addNwmatcher (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/node_modules/jsdom/lib/jsdom/selectors/index.js:6:27) 
    at HTMLDocument.<anonymous> (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/node_modules/jsdom/lib/jsdom/selectors/index.js:18:29) 
    at HTMLDocument.querySelectorAll (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/node_modules/jsdom/lib/jsdom/level1/core.js:63:53) 
    at Browser.queryAll (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/lib/zombie/browser.js:348:26) 
    at Browser.field (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/lib/zombie/browser.js:591:17) 
    at Browser._findOption (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/lib/zombie/browser.js:662:18) 
    at Browser.select (/var/lib/openshift/[app-id]/app-root/runtime/repo/node_modules/zombie/lib/zombie/browser.js:692:19) 
    at /var/lib/openshift/[app-id]/app-root/runtime/repo/poker.js:61:17 

После того как я увидел это, я пытался visit другая страница (Google) через Zombie, но он также возвращает пустой HTML.

Я рассмотрел некоторые другие вопросы StackOverflow о ошибке compareDocumentPosition, но я думаю, что тот, который у меня есть, связан с развертыванием на Openshift, а не с HTML-страницей страницы, которую я посещаю.

Я использую Node.js v0.10.25 и Zombie v2.2.1.

+0

возможно '.then' не дожидается полной загрузки страницы. См. [Этот ответ] (http://stackoverflow.com/questions/19101258/why-does-the-zombie-js-browser-return-empty-html-when-using-bootstrap) для возможного обходного пути – yuvi

+0

Я попытался использовать '.wait()', тело все еще пусто – apparatix

+1

он не просто использует 'wait', он запускает функцию, которая проверяет наличие определенного элемента DOM и ждет его появления. т.е. '.wait (foo, function() {...});', где 'foo' возвращает' window.document.querySelector (". my-dom-element"); ' – yuvi

ответ

1

Это проблема CORS? .login не является действительным TLD, и правила изменяются для каждого домена.

+0

URL-адрес на самом деле не some.login/page, который был заполнителем – apparatix

0

Вы уверены, что переменная «браузер», с которой вы пытаетесь работать, является объектом, эта ошибка может возникнуть, если переменная является строкой.

+0

Используйте JSON.parse (variableName), чтобы превратить его в объект JSON из строки, если он таков. – user2048239

+0

Выполнение одного и того же точного кода локально отлично работает; также Zombie.create возвращает объект браузера. – apparatix

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

  • Нет связанных вопросов^_^