Необработанное отклонение обещания (идентификатор отклонения: 1): Ошибка: kill ESRCH
Я провел некоторые исследования в Интернете и SOF, но не нашел ничего действительно полезного в этой ошибке.
Я установил Node и Puppeteer с Windows 10 Ubuntu Bash, но мне не удалось заставить его работать, но мне удалось заставить его работать в Windows без Bash на другой машине.
Моя команда:
node index.js
Мой index.js пытается сделать скриншот страницы:
const puppeteer = require('puppeteer');
async function run() {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://github.com');
await page.screenshot({ path: 'screenshots/github.png' });
browser.close();
}
run();
Кто-нибудь знает, как я мог бы исправить эту ошибку "Ошибка: убить ESRCH"?
4 ответа
Я только что исправил эту проблему. Что вам нужно сделать, это следующее:
1) Установите зависимости Debian
Вы можете найти их в этом документе: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md
sudo apt-get install
все эти плохие парни.
2) Добавить '--no-sandbox'
флаг при запуске кукловода
3) Убедитесь, что ваши windows 10 обновлены. Я пропустил важное обновление, которое позволило вам запустить Chrome.
У меня была такая же проблема, это работало на меня. Попробуйте обновить ваш скрипт следующим образом:
const puppeteer = require('puppeteer');
async function run() {
//const browser = await puppeteer.launch();
const browser = await puppeteer.launch({headless: true, args: ['--no-sandbox'] }); //WSL's chrome support is very new, and requires sandbox to be disabled in a lot of cases.
const page = await browser.newPage();
await page.goto('https://github.com');
await page.screenshot({ path: 'screenshots/github.png' });
await browser.close(); //As @Md. Abu Taher suggested
}
run();
const browser = await puppeteer.launch({ args: ['--no-sandbox'] });
Если вы хотите прочитать все подробности об этом, этот билет имеет их (или ссылки на них). https://github.com/Microsoft/WSL/issues/648
Другие пользователи кукловодов с похожими проблемами: https://github.com/GoogleChrome/puppeteer/issues/290
Я обошел это, софтклинговая chrome.exe для node_modules/puppeteer/.../chrome, как показано ниже
ln -s /mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe node_modules/puppeteer/.local-chromium/linux-515411/chrome-linux/chrome
Очки не учитывают:
Windows bash не является полной заменой Ubuntu bash (пока). Есть много случаев, когда различные приложения на основе графического интерфейса не работали должным образом. Кроме того, сценарий может быть сбит с толку bash на Windows 10. Он может подумать, что ОС - это Linux, а не Windows.
Windows 10 Bash поддерживает только 64-разрядные двоичные файлы, поэтому убедитесь, что узел и версия Chrome, которые используются внутри, в значительной степени 64-разрядные. Кукловод использует
-child.pid
убить дочерние процессы вместоchild.pid
на версии для Windows. Удостоверьтесь, что кукловод не смущается всеми этими вещами bash / windows.
Вернемся к вашему делу.
Ты используешь browser.close()
в функции, но это должно быть await browser.close()
иначе это не выполняется в правильном порядке.
Также постарайтесь добавить await page.close();
до browser.close();
,
Так что код должен быть,
await page.close();
await browser.close();