木偶:无法启动浏览器进程!产卵

时间:2020-09-29 10:27:08

标签: node.js express web-scraping puppeteer

当我尝试运行node app.js时,出现错误消息:

该消息无法启动浏览器进程!产卵 /Users/iliebogdanbarbulescu/Downloads/firstProject/node_modules/chromium/lib/chromium/chrome-mac/Chromium.app

访问

我做什么 我检查了/Users/iliebogdanbarbulescu/Downloads/firstProject/node_modules/chromium/lib/chromium/chrome-mac/Chromium.app上的文件夹,但该文件未压缩。可以运行。

注意: 如果我尝试在没有路径的情况下执行,它将起作用,但是 我想使用Chrome或Chromium来打开一个新页面。 const browser = await puppeteer.launch({headless:false'});

const express = require('express');
const puppeteer = require('puppeteer');
const app = express();

(async () => {
  const browser = await puppeteer.launch({headless:false, executablePath:'/Users/iliebogdanbarbulescu/Downloads/firstProject/node_modules/chromium/lib/chromium/chrome-mac/Chromium.app'});
 const page = await browser.newPage();
 await page.goto('https://google.com', {waitUntil: 'networkidle2'});

})().catch((error) =>{
  console.error("the message is " + error.message);
});

app.listen(3000, function (){
    console.log('server started');
})

enter image description here

3 个答案:

答案 0 :(得分:3)

如果您在此确切的浏览器中导航到chrome://version/页面,它将显示Executable Path,这是您用作executablePath操纵up启动选项所需的确切字符串。

通常,chrome的路径在MAC上看起来像这样:

/Applications/Google Chrome.app/Contents/MacOS/Google Chrome

如果铬位于node_modules文件夹中,则类似这样:

/Users/iliebogdanbarbulescu/Downloads/firstProject/node_modules/chromium/lib/chromium/chrome-mac/Chromium.app/Contents/MacOS/Chromium

现在,如果您比较用于executablePath的字符串,则该字符串不同于使用上述方法检索到的字符串。 恰好将/Contents/MacOS/Chromium添加到当前路径的末尾以使其起作用。

注意:与puppeteer捆绑在一起的铬是可与实际pptr版本一起使用的版本:如果打算使用其他基于chrome /或chrome的浏览器,则可能会遇到意外问题。

答案 1 :(得分:1)

使用位置镶边:https://www.npmjs.com/package/locate-chrome

const locateChrome = require('locate-chrome');
const executablePath = await new Promise(resolve => locateChrome(arg => resolve(arg)));
const browser = await puppeteer.launch({ executablePath });

答案 2 :(得分:0)

关注@theDavidBarton:

Puppeteer随附的Chromium无法正常工作,但MacBook上的Chrome安装确实可以正常工作。

OS:OS-X 10.15.7(Catalina) 节点版本:v14.5.0

失败的代码:

const browser = await puppeteer.launch({
  headless: true, 
  executablePath: "/users/bert/Project/NodeJS/PuppeteerTest/node_modules/puppeteer/.local-chromium/mac-818858/chrome-mac/Chromium.app/Contents/MacOS/Chromium"
});

成功的代码:

const browser = await puppeteer.launch({
  headless: true, 
  executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
});

完整代码,只是Puppeteer网站上的第一个示例:

const puppeteer = require('puppeteer');

(async () => {
    try {
        const browser = await puppeteer.launch({headless: true, executablePath: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"});
        const page = await browser.newPage();
        await page.goto('https://example.com');
        await page.screenshot({path: 'example.png'});

        await browser.close();
    } catch (err) {
        console.log(err);
    }
})();

是的,我得到了屏幕截图! :-)