Заставьте NodeJS/JSDom ждать полного рендеринга перед очисткой

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

Я понимаю, что большая часть 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());


  }
});

person Id Rathernotsay    schedule 07.01.2017    source источник


Ответы (1)


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

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

person Pyx    schedule 07.01.2017