繁体   English   中英

创建文件并将其保存到变量NodeJS

[英]Creating file and saving to a variable NodeJS

我正在使用Puppeteer抓取网站。 我的目标是能够在响应中发送屏幕截图图像和html文件。

我的代码将显示我的路线接收到的URL作为参数,并将其传递给我的抓取函数,通过Puppeteer执行适当的操作,并返回屏幕截图和(当前)HTML作为字符串。 我需要将该html字符串转换为HTML文件,而不保存它,仅在内存中。

路由文件:

const crawler = require('./../puppeteer/crawler.js');


module.exports = function(app) {
  app.get('/crawl/screenshot/:url', (req, res) => {
    const url = req.params.url;
    crawler.pageScreenshot(url, function(screenshot) {
      let buffer = new Buffer(screenshot);
      let myScreenshot = buffer.toString('base64');
      // res.contentType('image/png');
      res.send(myScreenshot);
    });
  });
  app.get('/crawl/html/:url', (req, res) => {
    const url = req.params.url;
    crawler.pageHTML(url, function(html) {
      console.log(typeof html);
      let buffer = Buffer.from(html).toString('base64');
      // res.contentType('text/html');
      res.send(buffer);
    });
  });
  app.get('/crawl/screenshot_and_html/:url', (req, res) => {
    const url = req.params.url;
    crawler.pageScreenshotAndHTML(url, function(screenshot,html) {
      let buffedScreen = Buffer.from(screenshot).toString('base64');
      let buffedHtml = Buffer.from(html).toString('base64');
      let obj = JSON.stringify({'screenshot': buffedScreen, 'html': buffedHtml});
      res.contentType('application/json');
      res.send(obj);
    });
  });
};

搜寻器文件:

const puppeteer = require('puppeteer');

async function pageScreenshot(url, cb) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  let screenshot = await page.screenshot({fullPage: true});
  await browser.close();
  cb(screenshot);
}
async function pageHTML(url, cb) {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  let html = await page.content();
  await browser.close();
  cb(html);
}
async function pageScreenshotAndHTML(url,cb) {
  // this encoding doesn't work
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(url);
  let screenshot = await page.screenshot({fullPage: true});
  let html = await page.content();
  await browser.close();
  cb(screenshot,html);
}
module.exports = {
  pageScreenshot: pageScreenshot,
  pageHTML: pageHTML,
  pageScreenshotAndHTML: pageScreenshotAndHTML
}

同样,我的变量html(在我的搜寻器文件中)当前是html字符串。 我需要该变量是一个HTML文件,其中包含我从puppeteer获取的html,而不仅仅是一个字符串。 我想执行此操作而无需在本地保存/写入文件,然后必须删除该文件。

谢谢!

我最初的想法和问题是,我想发回2个项目-编码的png文件和编码的html文件。 这最终将由其他应用程序接收。 然后,在解码时,我以为他们会在编码之前将它们解码成上面Node应用程序中的文件。 但是现在我看到,即使将png本身发送回去,接收应用程序仍然必须将图像转换为字符串格式。 因此,我最初的想法和问题不再有效,因为在接收应用程序中,无论发送方式如何,我都必须翻译好收到的内容。 我的代码保持不变,它响应base64编码的png和string(html)。 我负责在进行调用的应用中将它们从base64解码的字符串格式转换为正确的格式(在这种情况下为PNG和HTML)。 对困惑感到抱歉!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM