puppeteer的使用问题
发布于 1 年前 作者 quanpf2481 3387 次浏览 来自 问答

在阿里云服务器上,系统是Debian8.9,安装puppeteer是使用cnpm i puppeteer的命令安装的,安装也成功了,在进行测试的时候出现了问题,我的测试代码如下: const puppeteer = require(‘puppeteer’);

(async () => { let browser = await puppeteer.launch({ executablePath: ‘./chromium/chrome.exe’, headless: false }); const page = await browser.newPage(); await page.goto(‘http://music.163.com/’); await page.screenshot({path: ‘music.png’}); browser.close(); })(); 运行后出现如下的错误: (node:23748) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Failed to launch chrome! spawn ./chromium/chrome.exe ENOENT

TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

(node:23748) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code. 请问一下有没有碰到这样的,怎么样来解决呢???感谢!!!

18 回复

Error: Failed to launch chrome! spawn ./chromium/chrome.exe ENOENT

错误很明显chrome启动失败,executablePath: './chromium/chrome.exe' linux不可以用Windows的chromium,cnpm安装成功的话puppeteer不需要额外指定chromium路径。

@Zero2key 感谢回复!!!我修改了一下程序如下: const puppeteer = require(‘puppeteer’);

(async () => { try{ let browser = await puppeteer.launch(); const page = await browser.newPage(); await page.goto(‘http://music.163.com/’); await page.screenshot({path: ‘music.png’}); // browser.close(); }catch(err) { console.log('pid: ‘,process.pid,’ ',err.stack); }

})(); 再次运行还是出现了如下错误: pid: 26774 Error: Failed to launch chrome! /var/webSpider/node_modules/_puppeteer@1.9.0@puppeteer/.local-chromium/linux-594312/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

at onClose (/var/webSpider/node_modules/_puppeteer@1.9.0@puppeteer/lib/Launcher.js:339:14)
at Interface.helper.addEventListener (/var/webSpider/node_modules/_puppeteer@1.9.0@puppeteer/lib/Launcher.js:328:50)
at emitNone (events.js:110:20)
at Interface.emit (events.js:207:7)
at Interface.close (readline.js:365:8)
at Socket.onend (readline.js:146:10)
at emitNone (events.js:110:20)
at Socket.emit (events.js:207:7)
at endReadableNT (_stream_readable.js:1047:12)
at _combinedTickCallback (internal/process/next_tick.js:102:11)

请问是什么问题呢???

pid:  26774   Error: Failed to launch chrome!
/var/webSpider/node_modules/_puppeteer@1.9.0@puppeteer/.local-chromium/linux-594312/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

TROUBLESHOOTING: https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md

仔细阅读下这段

@atian25 就是没看明白什么意思。。。

@atian25 我现在npm包的安装路径是/var/webSpider/,在这个路径下node_modules文件里包含一个_puppeteer@1.9.0@puppeteer,请问一下,chrome的路径应该怎么来设置呢??新手,还望见谅。

那段报错的意思是,系统缺少依赖库,然后后面给了一个 URL,里面有相关的脚本

@atian25 感谢回复,对于这个问题我真的是一点头绪都没有,这个报错应该怎么来解决呢??是因为我的npm依赖包不完整嘛???

安装puppeteer还有一种方法是跳过下载Chromium,然后手动安装chrome,比如下面

npm i --save puppeteer --ignore-scripts

手动安装chrome

sudo apt install google-chrome

截图功能

const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({ executablePath: 'google-chrome' });
    const page = await browser.newPage();
    await page.goto('https://y.qq.com');
    await page.screenshot({path: 'yqq.png'});
    browser.close();
})();

@quanpf2481 那个是操作系统的 so 文件。。。你需要补充下 Linux 的基础。那个链接里面已经给出了各种环境下的依赖安装方式了。

@xpplee sudo apt install google-chrome执行的结果是: E: Unable to locate package google-chrome 请问是什么原因呢??

@atian25 哦哦,感谢感谢,我一直以为是npm包的问题。

@quanpf2481 因为源里没有这个google-chrome软件,你可以百度搜索Debian chrome,应该有很多教程教怎么安装chrome

系统依赖的问题,要多安装几个包,你可以百度unbuntu安装puppeteer常见问题试试看里面的方法

如果依赖装完了,检查下node_modules对应目录下有没有chromium的可执行文件,如果有的话,还有个情况是,你系统是32位的,它给你下了个64位的。。我就遇到过这情况,非常迷,后来自己手动下了个32位的搞定

@ta7sudan 感谢回复!!我的系统是Debian8.9无图形界面版本,你说的chromium的可执行文件是指什么??在node_modules下有一个文件_puppeteer@1.9.0@puppeteer,这个文件下面有个.local-chromium文件,请问应该来怎么做呢???

@entrehuihui 看了一些,没有什么头绪,真是头大!!!!

最后说一句吧,要的依赖,对应的做法,在那个 URL 里面写的明明白白清清楚楚,并不是没有头绪,而是欲速则不达,打打 Linux 基础吧。

@quanpf2481 确实需要补下Linux了, 你这里缺少libX11-xcb

$ sudo apt install libX11-xcb

试试吧, 不确定这东西在Debian仓库里叫什么, 靠自动补全看看

回到顶部