example.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /* global require */
  2. const fs = require("fs");
  3. const jsdom = require("jsdom");
  4. const request = require("request-promise-native");
  5. const SingleFileNode = require("./single-file-node.js");
  6. run({
  7. url: "https://github.com/gildas-lormeau/SingleFile",
  8. userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko Firefox AppleWebKit (KHTML, like Gecko) Chrome Safari",
  9. removeHiddenElements: true,
  10. removeUnusedStyles: true,
  11. removeUnusedFonts: true,
  12. removeFrames: true,
  13. removeImports: true,
  14. removeScripts: true,
  15. compressHTML: true,
  16. compressCSS: true,
  17. loadDeferredImages: false,
  18. filenameTemplate: "{page-title} ({date-iso} {time-locale}).html",
  19. removeAudioSrc: true,
  20. removeVideoSrc: true,
  21. displayInfobar: true,
  22. removeAlternativeFonts: true,
  23. removeAlternativeMedias: true,
  24. removeAlternativeImages: true,
  25. groupDuplicateImages: true
  26. });
  27. async function run(options) {
  28. const pageContent = (await request({
  29. method: "GET",
  30. uri: options.url,
  31. resolveWithFullResponse: true,
  32. encoding: null,
  33. headers: {
  34. "User-Agent": options.userAgent
  35. }
  36. })).body.toString();
  37. const dom = new jsdom.JSDOM(pageContent, { url: options.url, virtualConsole: new jsdom.VirtualConsole(), userAgent: options.userAgent });
  38. options.win = dom.window;
  39. options.doc = dom.window.document;
  40. options.saveRawPage = true;
  41. const processor = new (SingleFileNode.getClass())(options);
  42. await processor.initialize();
  43. await processor.run();
  44. const page = await processor.getPageData();
  45. fs.writeFileSync(page.filename, page.content);
  46. }