Открытие локального файла html с помощью кукольника
Возможно ли открыть локальный html файл с безголовым хромом, используя кукольник (без веб-сервера)? Я мог только запустить его для работы с локальным сервером.
Я мог видеть setContent() api и goto() api и
- page.goto: не работал с локальным файлом или файлом://тоже.
- page.setContent: для строки html
Ответы
Ответ 1
Я просто сделал тест на месте (вы можете видеть, что я сделал это на окнах), и кукольник с радостью открыл мой локальный html файл, используя page.goto и полный файл url, и сохранил его как pdf:
'use strict';
const puppeteer = require('puppeteer');
(async() => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('file://C:/Users/compoundeye/test.html');
await page.pdf({
path: 'test.pdf',
format: 'A4',
margin: {
top: "20px",
left: "20px",
right: "20px",
bottom: "20px"
}
});
await browser.close();
})();
Если вам нужно использовать относительный путь, возможно, вы захотите рассмотреть этот вопрос об использовании относительных путей к файлу: Файл Uri Scheme и Relative Files
Ответ 2
Если файл локальный, лучше использовать setContent, чем перейти
var contentHtml = fs.readFileSync('file://C:/Users/compoundeye/test.html', 'utf8');
await page. setContent(contentHtml);
Вы можете проверить производительность между setContent и перейти на здесь
Ответ 3
Почему бы не открыть HTML файл, прочитав содержимое, тогда "setContent"
Ответ 4
Я открываю файл, который хочу загрузить в браузер, и копирую URL, чтобы убедиться в правильности всех\где.
await page.goto('file:///C:/pup_scrapper/testpage/TM.html');
Ответ 5
Переход к локальным файлам работает только в том случае, если вы также передаете реферер file://
, в противном случае ограничения безопасности не позволяют этому успешно завершиться.