NodeJS 无法启动浏览器进程!“/usr/bin/chromium-browser”需要安装chromium快照

fzwojiic  于 2022-12-22  发布在  Node.js
关注(0)|答案(2)|浏览(573)

我正在尝试打一个使用puppeteer的API,它基本上有一个功能,让我不和谐的用户,不是很精通puppeteer所以介意我缺乏解释,做了一些研究,并找到了一些解决方案,作为手动安装 chrome ,这样做了,运行puppeteer运行 chrome 与无头仍然没有运气,它提示我与命令'/usr/bin/chromium-browser'需要安装 chrome 管理单元,我使用WSL运行此程序,但WSL似乎并不真正支持此程序,

const browser = await puppeteer.launch({
   //only for testing
     headless: true,
    // for testing at - ibad
    executablePath: '/usr/bin/chromium-browser',
    args: [
        '--no-sandbox',
        '--start-maximized'
    ],
    ignoreHTTPSErrors: true
});

这是puppeteer的启动代码,我在API响应中得到的消息:

“留言”:“启动浏览器进程失败!\n\n命令'/usr/bin/chromium-browser'要求安装chromium snap。\n请使用以下命令安装chromium snap:\n\nsnap install chromium\n\n\n故障排除:https://github.com/puppeteer/puppeteer/blob/main/docs/troubleshooting.md\n",

任何帮助都将不胜感激,新来的这个 puppet 戏的东西谢谢!

fafcakar

fafcakar1#

WSL现在支持Systemd(以及Snap),有关如何启用的信息,请参见this Community Wiki answer或我最初的answer on Ask Ubuntu
基于最近的WSL更改,特别是对于Ubuntu上的Chromium,您有几个选项:

  • 选项1:根据上面的链接,在WSL中的Ubuntu上启用Systemd和Snap功能。
  • 选项2:不使用Snap安装。请参阅this Ask Ubuntu question了解一些不同的方法。
  • 选项3:使用谷歌Chrome(或其他),而不是Chromium

我在Ubuntu with Selenium上使用chromedriver和Google Chrome时没有遇到任何问题。自从我使用Puppeteer(WSLg之前)以来已经有两年了,但是我在WSL 2上也能做到。
如果你想使用非Google Chrome浏览器,那么Brave和Vivaldi(可能还有其他浏览器)是候选者,根据之前的研究,IIRC都提供了webdriver。

  • 选项4:在WSL 2下使用非Systemd发行版。我已经能够在WSL 2下在阿蒂克斯Linux上成功地安装和运行Chromium/chromedriver,并将其与Selenium一起使用。然而,这可能不是一个新手友好的任务,但无论如何,我将把它作为一种可能性扔掉。
dxxyhpgq

dxxyhpgq2#

如果使用选项2(上面),它可以通过将executablePath属性设置为google-chrome在WSL2上工作。您必须安装完整的Google Chrome:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sudo apt install ./google-chrome-stable_current_amd64.deb
const puppeteer = require('puppeteer-core');

async function scrapeWebData(url, selector, callback, headless){
    if(headless === undefined){
        headless = true;
    }
    const browser = await puppeteer.launch({
        executablePath: '/usr/bin/google-chrome-stable',
        headless: headless
    });
    const page = await browser.newPage();
    await page.setDefaultNavigationTimeout(0);
    const res = await page.goto(url);
    const status = res.status();
    if(status != 200){
        throw new Error(`The URL at '${url}' was not found.`);
    }
    const results = await page.$$eval(selector, callback);
    await browser.close();
    if(results === undefined || results.length === 0) {
        throw new Error('The CSS selector returned 0 results.');
    }
    return results;
}

相关问题