2017-01-07 4 views
0

Я пытаюсь очистить данные с веб-сайта, который мне нужен для входа. К сожалению, я получаю разные результаты с помощью JSDom/NodeJS, чем если бы я использовал веб-браузер, такой как FF. В частности, я не получаю регистрационную форму с именем пользователя, паролем и кнопкой отправки.Сделать NodeJS/JSDom ждать полного рендеринга перед очисткой

Насколько я понимаю, Javascript, по крайней мере, является асинхронным. Тем не менее, я думал, что «сделанная» функция JSDom синхронно ждет полного рендеринга страницы. Я предполагаю, что я хотел бы сделать, это смоделировать HTTPS и дождаться полного документа. Теперь нужно сделать.

var jsdom = require("jsdom"); 
var jsdom_global = require("jsdom-global"); 
var fs = require("fs"); 
var jquery = fs.readFileSync("./jquery-3.1.1.min.js", "utf-8"); 

jsdom.env({ 
    url: "https://wemc.smarthub.coop/Login.html#login:", 
    src: [jquery], 
    done: function (err, window) { 
    var $ = window.$; 
    if($("button#LoginSubmitButton").length) { 
     console.log('Click button found'); 
    } else { 
     console.log('Click button not found'); 
    } 
    // The following text boxes are not coming back: 
    // $("input#LoginUsernameTextBox") 
    // $("input#LoginPasswordTextBox") 

    // If I enable the line below, I see a lot less than I would if I 
    // do a view source in any reasonable browser. 
    //console.log($("body").html()); 


    } 
}); 

ответ

1

Обычно это происходит из-за того, что JSDOM не выполняет JS при попадании на страницу. В этом случае единственными возвращаемыми элементами будет отображаемый на сервере HTML.

Вы можете попробовать использовать модуль без браузера, такой как PhantomJS и т. Д., И посмотреть, как это происходит для вас. Существует раздел о различии между двумя в нижней части JSDOM github page.

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