Можно ли конвертировать/сохранить динамически сгенерированную js страницу в статичный html-файл?

Да, вы можете конвертировать и сохранить динамически сгенерированную JavaScript-страницу в статичный HTML-файл. Вот несколько способов, как это можно сделать:

1. Использование Puppeteer: Популярная библиотека Puppeteer позволяет вам автоматически управлять Chrome или Chromium и выполнить JavaScript в браузере. Вы можете использовать Puppeteer, чтобы открыть страницу, выполнить все необходимые JavaScript-скрипты и сохранить отрендеренный HTML-код в файл.

Пример кода, использующего Puppeteer:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://www.example.com');

  // Выполнение JavaScript на странице, если это необходимо

  const html = await page.content();
  await page.close();
  await browser.close();

  // Сохранение HTML-страницы в файл
  const fs = require('fs');
  fs.writeFileSync('output.html', html);
})();

2. Использование JSDOM: JSDOM - это реализация DOM для Node.js. Она позволяет вам работать с HTML-кодом в Node.js с помощью стандартных методов DOM. Вы можете использовать JSDOM, чтобы создать DOM-дерево из HTML-кода, выполнить все скрипты на странице и сохранить результат в файл.

Пример кода, использующего JSDOM:

const jsdom = require('jsdom');
const { JSDOM } = jsdom;

const dom = new JSDOM('<!DOCTYPE html><html><body></body></html>');
const window = dom.window;
const document = window.document;

const scriptElement = document.createElement('script');
scriptElement.textContent = 'console.log("Hello, World!");';
document.body.appendChild(scriptElement);

// Выполнение скриптов на странице, если это необходимо

const html = window.document.documentElement.outerHTML;

// Сохранение HTML-страницы в файл
const fs = require('fs');
fs.writeFileSync('output.html', html);

3. Использование headless браузера: Вы можете использовать любой headless браузер, такой как Chrome или Firefox, чтобы просмотреть и сохранить HTML-код. Программа должна запускать браузер в headless режиме, открывать страницу, выполнить все JavaScript-скрипты и сохранить отрендеренный HTML-код в файл.

Пример кода, использующего headless Chrome:

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({ headless: true });
  const page = await browser.newPage();
  await page.goto('https://www.example.com');

  // Выполнение JavaScript на странице, если это необходимо

  const html = await page.evaluate(() => document.documentElement.outerHTML);
  await page.close();
  await browser.close();

  // Сохранение HTML-страницы в файл
  const fs = require('fs');
  fs.writeFileSync('output.html', html);
})();

Обратите внимание, что в каждом из примеров выше следует добавить дополнительную логику, чтобы выполнить JavaScript на странице, если это необходимо. Это позволит сгенерировать конечный HTML-код, который точно соответствует динамически сгенерированной странице.

Надеюсь, что эти примеры помогут вам сохранить динамически сгенерированную JavaScript-страницу в статичный HTML-файл.