Я использую 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-файлом с HTML, который я получаю от кукловода, а не просто строкой. Я хотел бы сделать это без локального сохранения / записи в файл, а затем удалить его.
Спасибо!