当前位置 主页 > 服务器问题 > Linux/apache问题 >

    在linux (centos)上使用puppeteer实现网页截图功能

    栏目:Linux/apache问题 时间:2019-11-24 20:16

    你在linux上安装puppeteer时可能遇到如下问题,本文将引导你如何爬坑!

    > puppeteer@2.0.0 install /www/node_modules/puppeteer
    > node install.js

    ERROR: Failed to download Chromium r706915! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.
    { Error: EACCES: permission denied, mkdir '/www/node_modules/puppeteer/.local-chromium'
      -- ASYNC --
        at BrowserFetcher.<anonymous> (/www/node_modules/puppeteer/lib/helper.js:111:15)
        at Object.<anonymous> (/www/node_modules/puppeteer/install.js:62:16)
        at Module._compile (module.js:635:30)
        at Object.Module._extensions..js (module.js:646:10)
        at Module.load (module.js:554:32)
        at tryModuleLoad (module.js:497:12)
        at Function.Module._load (module.js:489:3)
        at Function.Module.runMain (module.js:676:10)
        at startup (bootstrap_node.js:187:16)
        at bootstrap_node.js:608:3
      errno: -13,
      code: 'EACCES',
      syscall: 'mkdir',
      path: '/www/node_modules/puppeteer/.local-chromium' }
    npm WARN enoent ENOENT: no such file or directory, open '/www/package.json'
    npm WARN www No description
    npm WARN www No repository field.
    npm WARN www No README data
    npm WARN www No license field

    我成安装puppeteer并实际截图的过程如下:

    1.安装nodejs和npm

    # 下载解压
    wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz
    tar -xvf node-v8.9.1-linux-x64.tar.xz
    # 移动重命名(可选)
    mv node-v8.9.1-linux-x64 /www/nodejs
    # 创建软连接(快捷方式),如果上一步重命名不同则这一步的下划线部分根据实际情况做调整
    ln -s /www/nodejs/bin/node /usr/local/bin/node
    ln -s /www/nodejs/bin/npm /usr/local/bin/npm
    
    

    2.安装chromium

    yum install chromium

    3.安装puppeteer-core(直接安装pupperter会因为chromium无法下载而报错)

    npm i puppeteer-core

    4.新建一个a.js

    const puppeteer = require('puppeteer-core');
    (async () => {
     const browser = await puppeteer.launch({
     executablePath: '/usr/bin/chromium-browser',
     args:["--no-sandbox"]
     });
     const page = await browser.newPage();
     await page.goto('https://www.baidu.com');
     await page.screenshot({path: 'example.png'});
     await browser.close();
    })();

    这一步的代码跟网上的可能不同,一个是require里面的是puppeteer-core而不是puppeteer,因为我们安装的就是puppeteer-core而不是puppeteer

    另一个是launch里面有两个参数,第一个参数也是因为我们没有直接安装puppeteer所以需要指定路径,第二个参数则是因为chromium的某些限制,root账号执行需要加上这个参数

    5.执行a.js

    node a.js

    执行完之后就可以看到一个example.png

    注意:如果页面中有中文可能无法正常显示,因为缺乏中文字体。解决方法是直接把你自己电脑中的c:/windows/fonts中的中文字体上传到服务器的/usr/share/fonts/chinese下即可(默认没有chinese目录,自己新建即可)。如果不行请参考这个连接https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&tn=baidu&wd=centos%20%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93&oq=puppeteer&rsv_pq=a90b2ea50000943a&rsv_t=9035FHeJQWcr7x6RGsK%2BmDYU11AFyz8svepkcwhlQ51aDVXUfHrKZA7vFjQ&rqlang=cn&rsv_enter=0&rsv_dl=tb&inputT=5789&rsv_sug3=132&rsv_sug1=63&rsv_sug7=100&rsv_sug2=0&rsv_sug4=5908