带有webshot的电子应用程序

时间:2017-03-06 07:48:27

标签: node.js phantomjs electron

所以,我正在开发一个使用Electron构建的小应用程序,它可以抓取网站并使用webshot截取屏幕截图。

我正在使用对话框模块,因此用户可以选择一个文件夹来保存屏幕截图。

webshot回调中的变量“filename”是用户选择的路径。

预期的行为是:

  • 截取屏幕截图
  • 如果文件夹不存在,则在所选路径中创建一个文件夹
  • 保存屏幕截图

这是代码的简化部分:

var savePath = dialog.showSaveDialog(
    {
        title: 'save screenshots'
    },
    function(filename) {
                if(filename === undefined) {
                //if the user hit cancel return
                return;
                }

                //ScreenShots options
                var options = {
                    shotSize: {
                        height: 'all'
                    }
                };


               webshot(
               www.example.com/page.html,  
               filename+'/screen.png', 
               options, 
               function(err) {

               //some other logic that zip the folder
               zipFolder(screens_folder, folder_name );

              });

      });

当我从命令行启动应用程序electron .时,这可以正常工作,当我使用电子构建器打包应用程序时,webshot函数失败并出现以下错误:

Uncaught Exception:
Error: spawn ENOTDIR    
    at exports._errnoException (util.js:1026:11)    
    at ChildProcess.spawn (internal/child_process.js:313:11)    
    at Object.exports.spawn (child_process.js:392:9)    
    at Function.spawn (/Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/node_modules/cross-spawn/index.js:87:19)    
    at spawnPhantom (/Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/lib/webshot.js:201:32)    
    at spawn (/Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/lib/webshot.js:105:14)    
    at /Users/lorenzo/Desktop/web-dev/screenshots_app/dist/mac/screenShotApps.app/Contents/Resources/app.asar/node_modules/webshot/lib/webshot.js:117:16    
    at FSReqWrap.cb [as oncomplete] (original-fs.js:257:19)

编辑:我使用的是节点:6.5.0,Chrome:53.0.2785.113,电子版:1.4.3

1 个答案:

答案 0 :(得分:0)

经过大量挖掘后,我最终找到了解决方案:

https://github.com/electron-userland/electron-builder/issues/335

  

我的应用程序中的节点生成函数,这是一个函数   这不适用于asar档案。我不得不阅读代码来计算   如何阻止电子建设者归档我的应用程序。

     

只需在构建部分设置" asar":false   的package.json。