Открытие локального файла html с помощью кукольника

Возможно ли открыть локальный html файл с безголовым хромом, используя кукольник (без веб-сервера)? Я мог только запустить его для работы с локальным сервером.

Я мог видеть setContent() api и goto() api и

  1. page.goto: не работал с локальным файлом или файлом://тоже.
  2. 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://, в противном случае ограничения безопасности не позволяют этому успешно завершиться.