electron-scrape

this zero-dependency package will download and install the electron (v2.0.16) prebuilt-binary from https://github.com/electron/electron/releases

Usage no npm install needed!

<script type="module">
  import electronScrape from 'https://cdn.skypack.dev/electron-scrape';
</script>

README

electron-lite

this zero-dependency package will download and install the electron (v2.0.16) prebuilt-binary from https://github.com/electron/electron/releases

live web demo

  • none

screenshot

travis-ci.org build-status coverage

NPM

build commit status

git-branch : master beta alpha
test-report : test-report test-report test-report
coverage : coverage coverage coverage
build-artifacts : build-artifacts build-artifacts build-artifacts

npmPackageListing

npmPackageDependencyTree

table of contents

  1. cdn download
  2. documentation
  3. quickstart screenshot example
  4. extra screenshots
  5. package.json
  6. changelog of last 50 commits
  7. internal build script
  8. misc

cdn download

documentation

cli help

screenshot

api doc

apidoc

todo

  • add npm-script shell-function shNpmPostinstallAll
  • upgrade to electron v3.0.x when stable
  • none

changelog 2019.1.7

  • npm publish 2019.1.7
  • minor update to v2.0.16
  • none

this package requires

  • darwin or linux os

additional info

quickstart screenshot example

screenshot

to run this example, follow the instruction in the script below

/*
example.js

this electron script will screenshot the webpage https://electron.atom.io

instruction
    1. save this script as example.js
    2. run the shell command:
        $ npm install electron-lite && \
            printf '{"main":"example.js","name":"undefined","version":"0.0.1"}' > \
            package.json && \
            ./node_modules/.bin/electron . --disable-overlay-scrollbar --enable-logging
    3. view screenshot /tmp/screenshot.testExampleJs.browser..png
*/



/* istanbul instrument in package electron */
/* jslint utility2:true */
(function () {
    "use strict";
    var modeNext;
    var onNext;
    var options;
    onNext = function (data) {
        modeNext += 1;
        switch (modeNext) {
        case 1:
            /* istanbul ignore next */
            if (process.env.npm_config_mode_auto_restart) {
                return;
            }
            // wait for electron to init
            try {
                require("app").on("ready", onNext);
            } catch (ignore) {
                require("electron").app.once("ready", onNext);
            }
            break;
        case 2:
            // init options
            options = {frame: false, height: 768, width: 1024, x: 0, y: 0};
            // init browserWindow;
            try {
                options.BrowserWindow = require("browser-window");
            } catch (ignore) {
                options.BrowserWindow = require("electron").BrowserWindow;
            }
            options.browserWindow = new options.BrowserWindow(options);
            // goto next step when webpage is loaded
            /* istanbul ignore next */
            try {
                options.browserWindow.webContents.once("did-stop-loading", onNext);
            } catch (ignore) {
                setTimeout(onNext, 10000);
            }
            // open url
            (options.browserWindow.loadUrl || options.browserWindow.loadURL).call(
                options.browserWindow,
                "https://electron.atom.io"
            );
            break;
        case 3:
            // screenshot webpage
            options.browserWindow.capturePage(options, onNext);
            break;
        case 4:
            // screenshot
            /* istanbul ignore next */
            try {
                data = data.toPng();
            } catch (ignore) {
                data = data.toPNG();
            }
            require("fs").writeFileSync("/tmp/screenshot.testExampleJs.browser..png", data);
            console.log("created screenshot file /tmp/screenshot.testExampleJs.browser..png");
            // exit
            process.exit(0);
            break;
        }
    };
    modeNext = 0;
    onNext();
}());

output from browser

screenshot

output from shell

screenshot

extra screenshots

  1. https://kaizhu256.github.io/node-electron-lite/build/screenshot.buildCi.browser.%252Ftmp%252Fbuild%252Fapidoc.html.png screenshot

  2. https://kaizhu256.github.io/node-electron-lite/build/screenshot.buildCi.browser.%252Ftmp%252Fbuild%252Fcoverage.lib.html.png screenshot

  3. https://kaizhu256.github.io/node-electron-lite/build/screenshot.buildCi.browser.%252Ftmp%252Fbuild%252Ftest-report.html.png screenshot

package.json

{
    "author": "kai zhu <kaizhu256@gmail.com>",
    "bin": {
        "electron": "lib.electron.js"
    },
    "description": "this zero-dependency package will download and install the electron (v2.0.16) prebuilt-binary from https://github.com/electron/electron/releases",
    "devDependencies": {
        "utility2": "kaizhu256/node-utility2#alpha"
    },
    "engines": {
        "node": ">=10.0"
    },
    "homepage": "https://github.com/kaizhu256/node-electron-lite",
    "keywords": [
        "electron",
        "headless-browser",
        "screenshot",
        "web-scraper"
    ],
    "license": "MIT",
    "main": "lib.electron.js",
    "name": "electron-lite",
    "nameAliasPublish": "electron-scrape",
    "nameLib": "electron",
    "nameOriginal": "electron-lite",
    "os": [
        "darwin",
        "linux"
    ],
    "repository": {
        "type": "git",
        "url": "https://github.com/kaizhu256/node-electron-lite.git"
    },
    "scripts": {
        "build-ci": "./npm_scripts.sh",
        "env": "env",
        "eval": "./npm_scripts.sh",
        "heroku-postbuild": "./npm_scripts.sh",
        "postinstall": "./npm_scripts.sh",
        "start": "./npm_scripts.sh",
        "test": "./npm_scripts.sh",
        "utility2": "./npm_scripts.sh"
    },
    "version": "2019.1.7"
}

changelog of last 50 commits

screenshot

internal build script

  • build_ci.sh
# build_ci.sh

# this shell script will run the build for this package

shBuildCiAfter () {(set -e
    shDeployCustom
    # shDeployGithub
    # shDeployHeroku
    shReadmeTest example.sh
)}

shBuildCiBefore () {(set -e
    ln -s ../../lib.electron.js node_modules/.bin/electron || true
    shNpmTestPublished
    shReadmeTest example.js
    # screenshot
    cp /tmp/screenshot.*.png "$npm_config_dir_build"
)}

# run shBuildCi
eval "$(utility2 source)"
shBuildCi

misc

  • this package was created with utility2