PHP / Apache / Node / Puppeteer — ошибка: не удалось запустить процесс браузераApache

Ответить
Anonymous
 PHP / Apache / Node / Puppeteer — ошибка: не удалось запустить процесс браузера

Сообщение Anonymous »

Node.js v20.11.1

PHP 7.4.33

chrome/linux-124.0.6367.91
Изменить/TLDR : После дополнительных исследований, когда я запускаю через командную строку, Chrome помещает файлы в мой домашний каталог в .config/google-chrome-for-testing/ . Я предполагаю, что Chrome, должно быть, пытается найти этот каталог при запуске Apache. Сейчас разбираюсь в этом.
У меня есть файлы index.js и puppeteerrc.cjs в одном каталоге. Я пытаюсь создать PDF-файл страницы по заданному URL-адресу. puppeteerrc.cjs указывает каталог кэша. Содержимое обоих файлов приведено ниже.
Эта команда работает, если я запускаю ее из этого каталога
node index.js 'https://www.stackoverflow.com' output.pdf

Однако в PHP этого нет:
$cmd = "cd '/path/to/script' && node 'index.js' 'https://www.stackoverflow.com' /path/to/output.pdf 2>&1";
exec($cmd, $out, $error_code);

Я не уверен, в чем разница между командной строкой и Apache. Я запустил chrome_crashpad_handler --help, но не знаю, что делать с этой информацией.
Когда я устанавливаю конфигурацию executablePath в index.js, я получаю тот же результат , он запускается из строки cmd, а не из Apache:
const browser = await puppeteer.launch({
executablePath:'/opt/npm/.cache/puppeteer/chrome/linux-124.0.6367.91/chrome-linux64/chrome'
});

Я также попробовал все следующие конфигурации, и они выдают ту же ошибку:
args: ['--no-sandbox', "--disabled-setupid-sandbox"],
ignoreDefaultArgs: ['--disable-extensions'] ,
userDataDir: "/path/to/a/dir",
headless:true

Обратите внимание, что раньше, когда он не мог найти исполняемый файл Chrome, я получал другую ошибку, теперь, когда эта ошибка устранена, она все еще не работает. Итак, я знаю, что теперь он может найти исполняемый файл. Кроме того, я запустил is_executable() для файла Chrome, и PHP, работающий под Apache, возвращает true.
Я заметил, что существует ошибка ".config/google-chrome-for-testing/Crash". Reports» в моем домашнем каталоге. Теперь я предполагаю, что, возможно, он ищет один из этих каталогов, когда его запускает Apache.
Вывод при запуске команды узла из PHPopt/npm/lib/node_modules/puppeteer/node_modules/@puppeteer/browsers/lib/cjs/launch.js:310
reject(new Error([
^

Error: Failed to launch the browser process!
chrome_crashpad_handler: --database is required
Try 'chrome_crashpad_handler --help' for more information.

TROUBLESHOOTING: https://pptr.dev/troubleshooting

at Interface.onClose (/opt/npm/lib/node_modules/puppeteer/node_modules/@puppeteer/browsers/lib/cjs/launch.js:310:24)
at Interface.emit (node:events:530:35)
at Interface.close (node:internal/readline/interface:527:10)
at Socket.onend (node:internal/readline/interface:253:10)
at Socket.emit (node:events:530:35)
at endReadableNT (node:internal/streams/readable:1696:12)
at process.processTicksAndRejections (node:internal/process/task_queues:82:21)

Node.js v20.11.1

index.js
/**
* Create a PDF file from a URL. First command line
* argument (besidedes JS file) is URL, second one
* is output file.
* Usage: node index.js
*/

const node_path = "/opt/npm/lib/node_modules";
module.paths.unshift(node_path);

const puppeteer = require('puppeteer');

(async () => {

// Create a browser instance
const browser = await puppeteer.launch();

// Create a new page
const page = await browser.newPage();

// Website URL to export as pdf
const website_url = process.argv[2];

// output path
const output_path = process.argv[3];

// Open URL in current page
await page.goto(website_url, { waitUntil: 'networkidle0' });

//use the print CSS
await page.emulateMediaType('print');

// Downlaod the PDF
const pdf = await page.pdf({
path: output_path,
margin: { top: '.39in', right: '.39in', bottom: '.39in', left: '.39in' },
printBackground: true,
format: 'Letter',
});

// Close the browser instance
await browser.close();
})();

.puppeteerrc.cjs
/**
* @type {import("puppeteer").Configuration}
*/
module.exports = {
// Changes the cache location for Puppeteer.
cacheDirectory: '/opt/npm/.cache/puppeteer'
};


Подробнее здесь: https://stackoverflow.com/questions/785 ... er-process
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Apache»