JSDOM не сохранить сгенерированный HTML после обработки JavaScript - PullRequest
0 голосов
/ 17 января 2019

У меня есть html с таблицами, и в html я включил js скрипт bom.js:

$(document).ready(function() {
setTimeout(function() {
    var nums = [];

    $('#table_Serv tr td.serv-nomer').each(function (elem, ind) {
        nums[parseInt($(this).text())] = elem + 1;
        // nums.newNum[elem] = elem + 1;
        // nums.oldNum[elem] = parseInt($(this).text());
        $(this).text(elem + 1);
    });

    $('#test1234 tr td:nth-child(2)').each(function() {

        // extract each number in an array
        const numbers = $(this).html().split(',').map(x => Number(x));
        // var sortednum = [];
        var arrs = []
        for(var i = 0; i <= numbers.length; i++) {

            arrs[numbers[i]] = nums[numbers[i]];

        }
        // console.log(sortednum);
        // // Sort the numbers
        const sorted = arrs.sort((a, b) => a > b);
        ;
        const stringArray = sorted.reduce((tmp, x) => `${tmp},${x}`);

        // Insert the string back in the td
        $(this).text(stringArray);
    });
}, 1000);
});

Когда я захожу на html-страницу, скрипт работает и получает мне таблицу изменений с помощью javascript. Когда jsdom получает этот html, jsdom не выполняет javascript и получает чистый html.

Мой index.js:

'use strict';

const jsdom = require("jsdom");
const { JSDOM } = jsdom;
var fs = require('fs');

const options = {
    resources: 'usable',
    runScripts: 'dangerously',
};

var url = process.argv[2] !== undefined ? process.argv[2] : 'http://google.ru';

JSDOM.fromURL(url, options).then(dom => {

    setTimeout(function() {
        var cont = dom.window.document.getElementsByTagName('html')[0].innerHTML;
        console.log(cont);
        var file = url.split('/');
        var filename = file[file.length - 1];
        fs.writeFile("file.html" + filename, cont, function(err) {
            if(err) {
                return console.log(err);
            }

            // console.log("The file was saved!");
        }); 
    }, 1000)

});

Как я могу решить это решение? Мне нужно сохранить HTML после обработки JavaScript. Получить HTML по JavaScript. Как я могу это сделать?

Я попробовал это:

JSDOM.fromURL(url, options).then(dom => {

dom.window.onload = function() {
    var cont = dom.window.document.getElementsByTagName('html').[0].innerHTML;
        console.log(cont);
        var file = url.split('/');
        var filename = file[file.length - 1];
        fs.writeFile("file.html" + filename, cont, function(err) {
            if(err) {
                return console.log(err);
            }

            // console.log("The file was saved!");
        }); 
    };

});

Не работает :( window.onload метод не хочет работать ..

...