Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建文件并保存到变量NodeJS_Javascript_Node.js_File_Express_Puppeteer - Fatal编程技术网

Javascript 创建文件并保存到变量NodeJS

Javascript 创建文件并保存到变量NodeJS,javascript,node.js,file,express,puppeteer,Javascript,Node.js,File,Express,Puppeteer,我正在使用木偶演员抓取一个网站。我的目标是能够在响应中发送屏幕截图和html文件 我的代码将显示接收url作为参数的路由,将其传递给我的爬行函数,通过Puppeter执行正确的操作,并将屏幕截图和(当前)html作为字符串返回。我需要将html字符串转换为html文件,而不保存它,只保存在内存中 路由文件: const crawler = require('./../puppeteer/crawler.js'); module.exports = function(app) { app.

我正在使用木偶演员抓取一个网站。我的目标是能够在响应中发送屏幕截图和html文件

我的代码将显示接收url作为参数的路由,将其传递给我的爬行函数,通过Puppeter执行正确的操作,并将屏幕截图和(当前)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文件,包含我从Puppeter获得的HTML,而不仅仅是一个字符串。我不想在本地保存/写入文件的情况下执行此操作,然后必须删除该文件


谢谢

我最初的想法和问题是,我想发回两个项目——一个编码的png文件和一个编码的html文件。这最终将由另一个应用程序接收。然后当解码时,我想他们会在编码之前解码到上面节点应用程序中的文件中。但是现在我看到,即使自己发送回png,接收应用程序仍然必须从字符串格式转换图像。因此,我最初的想法和问题不再有效,因为在接收应用程序中,我必须负责翻译我收到的内容,无论它是如何发送的。我的代码保持不变,它响应base64编码的png和字符串(html)。我在调用的应用程序中负责将它们从base64解码字符串格式转换为正确的格式(本例中为PNG和HTML)。抱歉搞混了

“HTML文件变量”这是什么意思?DOM变量?如果要将html字符串包装到jQuery对象,可以使用
cheerio
package
const$=cheerio.load('your_html_string')@hoangdv不,我没有前端,这都是服务器端。您可以在我的第二段代码中看到爬虫文件:
let html=await page.content()。这将获取页面的整个HTML并将其保存到我的变量“HTML”中。然而,在这一点上,它只是一个字符串。然而,我需要以html文件的形式获取页面的html,而不是字符串。
cheerio
是一个在服务器端工作的包。我不知道你想要什么,如果你从html文件中读取html,它也会返回一个字符串,如果你想保存第一个
木偶演员的html数据,以便在下一个用户的请求中使用,只需保留您的html字符串,并使用另一个DOM访问包,而不是
puppeter
,而我需要以html文件的形式获取页面的html,而不是字符串
将此字符串保存到磁盘,您将获得一个文件。但后来你说你不想保存它。我们无法理解你所说的“文件”是什么意思。