postdoc 0.2.0.beta4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/postdoc/postdoc_view_helper.rb +15 -0
- data/lib/postdoc.rb +34 -14
- metadata +20 -373
- data/lib/pdf.js +0 -27
- data/node_modules/agent-base/History.md +0 -113
- data/node_modules/agent-base/README.md +0 -145
- data/node_modules/agent-base/index.js +0 -160
- data/node_modules/agent-base/package.json +0 -35
- data/node_modules/agent-base/patch-core.js +0 -37
- data/node_modules/agent-base/test/ssl-cert-snakeoil.key +0 -15
- data/node_modules/agent-base/test/ssl-cert-snakeoil.pem +0 -12
- data/node_modules/agent-base/test/test.js +0 -673
- data/node_modules/async-limiter/LICENSE +0 -8
- data/node_modules/async-limiter/coverage/coverage.json +0 -1
- data/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.html +0 -73
- data/node_modules/async-limiter/coverage/lcov-report/async-throttle/index.js.html +0 -246
- data/node_modules/async-limiter/coverage/lcov-report/base.css +0 -182
- data/node_modules/async-limiter/coverage/lcov-report/index.html +0 -73
- data/node_modules/async-limiter/coverage/lcov-report/prettify.css +0 -1
- data/node_modules/async-limiter/coverage/lcov-report/prettify.js +0 -1
- data/node_modules/async-limiter/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- data/node_modules/async-limiter/coverage/lcov-report/sorter.js +0 -156
- data/node_modules/async-limiter/coverage/lcov.info +0 -74
- data/node_modules/async-limiter/index.js +0 -67
- data/node_modules/async-limiter/package.json +0 -35
- data/node_modules/async-limiter/readme.md +0 -132
- data/node_modules/balanced-match/LICENSE.md +0 -21
- data/node_modules/balanced-match/README.md +0 -91
- data/node_modules/balanced-match/index.js +0 -59
- data/node_modules/balanced-match/package.json +0 -49
- data/node_modules/brace-expansion/LICENSE +0 -21
- data/node_modules/brace-expansion/README.md +0 -129
- data/node_modules/brace-expansion/index.js +0 -201
- data/node_modules/brace-expansion/package.json +0 -47
- data/node_modules/buffer-from/index.js +0 -69
- data/node_modules/buffer-from/package.json +0 -16
- data/node_modules/buffer-from/readme.md +0 -69
- data/node_modules/buffer-from/test.js +0 -12
- data/node_modules/concat-map/LICENSE +0 -18
- data/node_modules/concat-map/README.markdown +0 -62
- data/node_modules/concat-map/example/map.js +0 -6
- data/node_modules/concat-map/index.js +0 -13
- data/node_modules/concat-map/package.json +0 -43
- data/node_modules/concat-map/test/map.js +0 -39
- data/node_modules/concat-stream/LICENSE +0 -24
- data/node_modules/concat-stream/index.js +0 -144
- data/node_modules/concat-stream/package.json +0 -55
- data/node_modules/concat-stream/readme.md +0 -102
- data/node_modules/core-util-is/LICENSE +0 -19
- data/node_modules/core-util-is/README.md +0 -3
- data/node_modules/core-util-is/float.patch +0 -604
- data/node_modules/core-util-is/lib/util.js +0 -107
- data/node_modules/core-util-is/package.json +0 -32
- data/node_modules/core-util-is/test.js +0 -68
- data/node_modules/debug/CHANGELOG.md +0 -395
- data/node_modules/debug/LICENSE +0 -19
- data/node_modules/debug/Makefile +0 -58
- data/node_modules/debug/README.md +0 -368
- data/node_modules/debug/karma.conf.js +0 -70
- data/node_modules/debug/node.js +0 -1
- data/node_modules/debug/package.json +0 -43
- data/node_modules/debug/src/browser.js +0 -195
- data/node_modules/debug/src/debug.js +0 -225
- data/node_modules/debug/src/index.js +0 -10
- data/node_modules/debug/src/node.js +0 -186
- data/node_modules/es6-promise/CHANGELOG.md +0 -151
- data/node_modules/es6-promise/LICENSE +0 -19
- data/node_modules/es6-promise/README.md +0 -97
- data/node_modules/es6-promise/auto.js +0 -4
- data/node_modules/es6-promise/dist/es6-promise.auto.js +0 -1181
- data/node_modules/es6-promise/dist/es6-promise.auto.map +0 -1
- data/node_modules/es6-promise/dist/es6-promise.auto.min.js +0 -1
- data/node_modules/es6-promise/dist/es6-promise.auto.min.map +0 -1
- data/node_modules/es6-promise/dist/es6-promise.js +0 -1179
- data/node_modules/es6-promise/dist/es6-promise.map +0 -1
- data/node_modules/es6-promise/dist/es6-promise.min.js +0 -1
- data/node_modules/es6-promise/dist/es6-promise.min.map +0 -1
- data/node_modules/es6-promise/es6-promise.d.ts +0 -81
- data/node_modules/es6-promise/lib/es6-promise/-internal.js +0 -266
- data/node_modules/es6-promise/lib/es6-promise/asap.js +0 -119
- data/node_modules/es6-promise/lib/es6-promise/enumerator.js +0 -113
- data/node_modules/es6-promise/lib/es6-promise/polyfill.js +0 -35
- data/node_modules/es6-promise/lib/es6-promise/promise/all.js +0 -52
- data/node_modules/es6-promise/lib/es6-promise/promise/race.js +0 -84
- data/node_modules/es6-promise/lib/es6-promise/promise/reject.js +0 -46
- data/node_modules/es6-promise/lib/es6-promise/promise/resolve.js +0 -48
- data/node_modules/es6-promise/lib/es6-promise/promise.js +0 -427
- data/node_modules/es6-promise/lib/es6-promise/then.js +0 -32
- data/node_modules/es6-promise/lib/es6-promise/utils.js +0 -21
- data/node_modules/es6-promise/lib/es6-promise.auto.js +0 -3
- data/node_modules/es6-promise/lib/es6-promise.js +0 -7
- data/node_modules/es6-promise/package.json +0 -75
- data/node_modules/es6-promisify/README.md +0 -89
- data/node_modules/es6-promisify/dist/promise.js +0 -73
- data/node_modules/es6-promisify/dist/promisify.js +0 -85
- data/node_modules/es6-promisify/package.json +0 -41
- data/node_modules/extract-zip/CONTRIBUTING.md +0 -1
- data/node_modules/extract-zip/LICENSE +0 -23
- data/node_modules/extract-zip/cli.js +0 -20
- data/node_modules/extract-zip/index.js +0 -205
- data/node_modules/extract-zip/node_modules/debug/CHANGELOG.md +0 -362
- data/node_modules/extract-zip/node_modules/debug/LICENSE +0 -19
- data/node_modules/extract-zip/node_modules/debug/Makefile +0 -50
- data/node_modules/extract-zip/node_modules/debug/README.md +0 -312
- data/node_modules/extract-zip/node_modules/debug/component.json +0 -19
- data/node_modules/extract-zip/node_modules/debug/karma.conf.js +0 -70
- data/node_modules/extract-zip/node_modules/debug/node.js +0 -1
- data/node_modules/extract-zip/node_modules/debug/package.json +0 -49
- data/node_modules/extract-zip/node_modules/debug/src/browser.js +0 -185
- data/node_modules/extract-zip/node_modules/debug/src/debug.js +0 -202
- data/node_modules/extract-zip/node_modules/debug/src/index.js +0 -10
- data/node_modules/extract-zip/node_modules/debug/src/inspector-log.js +0 -15
- data/node_modules/extract-zip/node_modules/debug/src/node.js +0 -248
- data/node_modules/extract-zip/package.json +0 -35
- data/node_modules/extract-zip/readme.md +0 -49
- data/node_modules/fd-slicer/CHANGELOG.md +0 -49
- data/node_modules/fd-slicer/LICENSE +0 -21
- data/node_modules/fd-slicer/README.md +0 -189
- data/node_modules/fd-slicer/index.js +0 -277
- data/node_modules/fd-slicer/package.json +0 -36
- data/node_modules/fd-slicer/test/test.js +0 -350
- data/node_modules/fs.realpath/LICENSE +0 -43
- data/node_modules/fs.realpath/README.md +0 -33
- data/node_modules/fs.realpath/index.js +0 -66
- data/node_modules/fs.realpath/old.js +0 -303
- data/node_modules/fs.realpath/package.json +0 -26
- data/node_modules/glob/LICENSE +0 -15
- data/node_modules/glob/README.md +0 -368
- data/node_modules/glob/changelog.md +0 -67
- data/node_modules/glob/common.js +0 -240
- data/node_modules/glob/glob.js +0 -790
- data/node_modules/glob/package.json +0 -43
- data/node_modules/glob/sync.js +0 -486
- data/node_modules/https-proxy-agent/History.md +0 -124
- data/node_modules/https-proxy-agent/README.md +0 -137
- data/node_modules/https-proxy-agent/index.js +0 -229
- data/node_modules/https-proxy-agent/package.json +0 -35
- data/node_modules/https-proxy-agent/test/ssl-cert-snakeoil.key +0 -15
- data/node_modules/https-proxy-agent/test/ssl-cert-snakeoil.pem +0 -12
- data/node_modules/https-proxy-agent/test/test.js +0 -342
- data/node_modules/inflight/LICENSE +0 -15
- data/node_modules/inflight/README.md +0 -37
- data/node_modules/inflight/inflight.js +0 -54
- data/node_modules/inflight/package.json +0 -29
- data/node_modules/inherits/LICENSE +0 -16
- data/node_modules/inherits/README.md +0 -42
- data/node_modules/inherits/inherits.js +0 -7
- data/node_modules/inherits/inherits_browser.js +0 -23
- data/node_modules/inherits/package.json +0 -29
- data/node_modules/isarray/Makefile +0 -6
- data/node_modules/isarray/README.md +0 -60
- data/node_modules/isarray/component.json +0 -19
- data/node_modules/isarray/index.js +0 -5
- data/node_modules/isarray/package.json +0 -45
- data/node_modules/isarray/test.js +0 -20
- data/node_modules/mime/CHANGELOG.md +0 -225
- data/node_modules/mime/CONTRIBUTING.md +0 -5
- data/node_modules/mime/LICENSE +0 -21
- data/node_modules/mime/Mime.js +0 -89
- data/node_modules/mime/README.md +0 -188
- data/node_modules/mime/cli.js +0 -10
- data/node_modules/mime/index.js +0 -4
- data/node_modules/mime/lite.js +0 -4
- data/node_modules/mime/package.json +0 -43
- data/node_modules/mime/src/README_js.md +0 -179
- data/node_modules/mime/src/build.js +0 -71
- data/node_modules/mime/src/test.js +0 -257
- data/node_modules/mime/types/other.json +0 -1
- data/node_modules/mime/types/standard.json +0 -1
- data/node_modules/minimatch/LICENSE +0 -15
- data/node_modules/minimatch/README.md +0 -209
- data/node_modules/minimatch/minimatch.js +0 -923
- data/node_modules/minimatch/package.json +0 -30
- data/node_modules/minimist/LICENSE +0 -18
- data/node_modules/minimist/example/parse.js +0 -2
- data/node_modules/minimist/index.js +0 -187
- data/node_modules/minimist/package.json +0 -40
- data/node_modules/minimist/readme.markdown +0 -73
- data/node_modules/minimist/test/dash.js +0 -24
- data/node_modules/minimist/test/default_bool.js +0 -20
- data/node_modules/minimist/test/dotted.js +0 -16
- data/node_modules/minimist/test/long.js +0 -31
- data/node_modules/minimist/test/parse.js +0 -318
- data/node_modules/minimist/test/parse_modified.js +0 -9
- data/node_modules/minimist/test/short.js +0 -67
- data/node_modules/minimist/test/whitespace.js +0 -8
- data/node_modules/mkdirp/LICENSE +0 -21
- data/node_modules/mkdirp/bin/cmd.js +0 -33
- data/node_modules/mkdirp/bin/usage.txt +0 -12
- data/node_modules/mkdirp/examples/pow.js +0 -6
- data/node_modules/mkdirp/index.js +0 -98
- data/node_modules/mkdirp/package.json +0 -27
- data/node_modules/mkdirp/readme.markdown +0 -100
- data/node_modules/mkdirp/test/chmod.js +0 -41
- data/node_modules/mkdirp/test/clobber.js +0 -38
- data/node_modules/mkdirp/test/mkdirp.js +0 -28
- data/node_modules/mkdirp/test/opts_fs.js +0 -29
- data/node_modules/mkdirp/test/opts_fs_sync.js +0 -27
- data/node_modules/mkdirp/test/perm.js +0 -32
- data/node_modules/mkdirp/test/perm_sync.js +0 -36
- data/node_modules/mkdirp/test/race.js +0 -37
- data/node_modules/mkdirp/test/rel.js +0 -32
- data/node_modules/mkdirp/test/return.js +0 -25
- data/node_modules/mkdirp/test/return_sync.js +0 -24
- data/node_modules/mkdirp/test/root.js +0 -19
- data/node_modules/mkdirp/test/sync.js +0 -32
- data/node_modules/mkdirp/test/umask.js +0 -28
- data/node_modules/mkdirp/test/umask_sync.js +0 -32
- data/node_modules/ms/index.js +0 -152
- data/node_modules/ms/license.md +0 -21
- data/node_modules/ms/package.json +0 -37
- data/node_modules/ms/readme.md +0 -51
- data/node_modules/once/LICENSE +0 -15
- data/node_modules/once/README.md +0 -79
- data/node_modules/once/once.js +0 -42
- data/node_modules/once/package.json +0 -33
- data/node_modules/path-is-absolute/index.js +0 -20
- data/node_modules/path-is-absolute/license +0 -21
- data/node_modules/path-is-absolute/package.json +0 -43
- data/node_modules/path-is-absolute/readme.md +0 -59
- data/node_modules/pend/LICENSE +0 -23
- data/node_modules/pend/README.md +0 -41
- data/node_modules/pend/index.js +0 -55
- data/node_modules/pend/package.json +0 -18
- data/node_modules/pend/test.js +0 -137
- data/node_modules/process-nextick-args/index.js +0 -44
- data/node_modules/process-nextick-args/license.md +0 -19
- data/node_modules/process-nextick-args/package.json +0 -25
- data/node_modules/process-nextick-args/readme.md +0 -18
- data/node_modules/progress/CHANGELOG.md +0 -115
- data/node_modules/progress/LICENSE +0 -22
- data/node_modules/progress/Makefile +0 -8
- data/node_modules/progress/README.md +0 -146
- data/node_modules/progress/index.js +0 -1
- data/node_modules/progress/lib/node-progress.js +0 -231
- data/node_modules/progress/package.json +0 -25
- data/node_modules/proxy-from-env/README.md +0 -131
- data/node_modules/proxy-from-env/index.js +0 -103
- data/node_modules/proxy-from-env/package.json +0 -35
- data/node_modules/proxy-from-env/test.js +0 -393
- data/node_modules/puppeteer/CONTRIBUTING.md +0 -206
- data/node_modules/puppeteer/DeviceDescriptors.js +0 -704
- data/node_modules/puppeteer/LICENSE +0 -202
- data/node_modules/puppeteer/README.md +0 -306
- data/node_modules/puppeteer/index.js +0 -28
- data/node_modules/puppeteer/install.js +0 -122
- data/node_modules/puppeteer/lib/Browser.js +0 -186
- data/node_modules/puppeteer/lib/BrowserFetcher.js +0 -279
- data/node_modules/puppeteer/lib/Connection.js +0 -246
- data/node_modules/puppeteer/lib/Coverage.js +0 -301
- data/node_modules/puppeteer/lib/Dialog.js +0 -84
- data/node_modules/puppeteer/lib/ElementHandle.js +0 -328
- data/node_modules/puppeteer/lib/EmulationManager.js +0 -89
- data/node_modules/puppeteer/lib/ExecutionContext.js +0 -232
- data/node_modules/puppeteer/lib/FrameManager.js +0 -997
- data/node_modules/puppeteer/lib/Input.js +0 -309
- data/node_modules/puppeteer/lib/Launcher.js +0 -310
- data/node_modules/puppeteer/lib/Multimap.js +0 -95
- data/node_modules/puppeteer/lib/NavigatorWatcher.js +0 -137
- data/node_modules/puppeteer/lib/NetworkManager.js +0 -796
- data/node_modules/puppeteer/lib/Page.js +0 -1098
- data/node_modules/puppeteer/lib/Pipe.js +0 -69
- data/node_modules/puppeteer/lib/Puppeteer.js +0 -60
- data/node_modules/puppeteer/lib/Target.js +0 -88
- data/node_modules/puppeteer/lib/TaskQueue.js +0 -17
- data/node_modules/puppeteer/lib/Tracing.js +0 -99
- data/node_modules/puppeteer/lib/USKeyboardLayout.js +0 -281
- data/node_modules/puppeteer/lib/helper.js +0 -248
- data/node_modules/puppeteer/node6/lib/Browser.js +0 -394
- data/node_modules/puppeteer/node6/lib/BrowserFetcher.js +0 -357
- data/node_modules/puppeteer/node6/lib/Connection.js +0 -350
- data/node_modules/puppeteer/node6/lib/Coverage.js +0 -561
- data/node_modules/puppeteer/node6/lib/Dialog.js +0 -136
- data/node_modules/puppeteer/node6/lib/ElementHandle.js +0 -796
- data/node_modules/puppeteer/node6/lib/EmulationManager.js +0 -115
- data/node_modules/puppeteer/node6/lib/ExecutionContext.js +0 -414
- data/node_modules/puppeteer/node6/lib/FrameManager.js +0 -1621
- data/node_modules/puppeteer/node6/lib/Input.js +0 -569
- data/node_modules/puppeteer/node6/lib/Launcher.js +0 -362
- data/node_modules/puppeteer/node6/lib/Multimap.js +0 -95
- data/node_modules/puppeteer/node6/lib/NavigatorWatcher.js +0 -163
- data/node_modules/puppeteer/node6/lib/NetworkManager.js +0 -1108
- data/node_modules/puppeteer/node6/lib/Page.js +0 -2242
- data/node_modules/puppeteer/node6/lib/Pipe.js +0 -69
- data/node_modules/puppeteer/node6/lib/Puppeteer.js +0 -60
- data/node_modules/puppeteer/node6/lib/Target.js +0 -114
- data/node_modules/puppeteer/node6/lib/TaskQueue.js +0 -17
- data/node_modules/puppeteer/node6/lib/Tracing.js +0 -177
- data/node_modules/puppeteer/node6/lib/USKeyboardLayout.js +0 -281
- data/node_modules/puppeteer/node6/lib/helper.js +0 -274
- data/node_modules/puppeteer/package.json +0 -61
- data/node_modules/readable-stream/CONTRIBUTING.md +0 -38
- data/node_modules/readable-stream/GOVERNANCE.md +0 -136
- data/node_modules/readable-stream/LICENSE +0 -47
- data/node_modules/readable-stream/README.md +0 -58
- data/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
- data/node_modules/readable-stream/duplex-browser.js +0 -1
- data/node_modules/readable-stream/duplex.js +0 -1
- data/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
- data/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
- data/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
- data/node_modules/readable-stream/lib/_stream_transform.js +0 -214
- data/node_modules/readable-stream/lib/_stream_writable.js +0 -687
- data/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
- data/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
- data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
- data/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
- data/node_modules/readable-stream/package.json +0 -52
- data/node_modules/readable-stream/passthrough.js +0 -1
- data/node_modules/readable-stream/readable-browser.js +0 -7
- data/node_modules/readable-stream/readable.js +0 -19
- data/node_modules/readable-stream/transform.js +0 -1
- data/node_modules/readable-stream/writable-browser.js +0 -1
- data/node_modules/readable-stream/writable.js +0 -8
- data/node_modules/rimraf/LICENSE +0 -15
- data/node_modules/rimraf/README.md +0 -101
- data/node_modules/rimraf/bin.js +0 -50
- data/node_modules/rimraf/package.json +0 -26
- data/node_modules/rimraf/rimraf.js +0 -364
- data/node_modules/safe-buffer/LICENSE +0 -21
- data/node_modules/safe-buffer/README.md +0 -584
- data/node_modules/safe-buffer/index.d.ts +0 -187
- data/node_modules/safe-buffer/index.js +0 -62
- data/node_modules/safe-buffer/package.json +0 -37
- data/node_modules/string_decoder/LICENSE +0 -48
- data/node_modules/string_decoder/README.md +0 -47
- data/node_modules/string_decoder/lib/string_decoder.js +0 -296
- data/node_modules/string_decoder/package.json +0 -31
- data/node_modules/typedarray/LICENSE +0 -35
- data/node_modules/typedarray/example/tarray.js +0 -4
- data/node_modules/typedarray/index.js +0 -630
- data/node_modules/typedarray/package.json +0 -55
- data/node_modules/typedarray/readme.markdown +0 -61
- data/node_modules/typedarray/test/server/undef_globals.js +0 -19
- data/node_modules/typedarray/test/tarray.js +0 -10
- data/node_modules/ultron/LICENSE +0 -22
- data/node_modules/ultron/README.md +0 -113
- data/node_modules/ultron/index.js +0 -136
- data/node_modules/ultron/package.json +0 -41
- data/node_modules/util-deprecate/History.md +0 -16
- data/node_modules/util-deprecate/LICENSE +0 -24
- data/node_modules/util-deprecate/README.md +0 -53
- data/node_modules/util-deprecate/browser.js +0 -67
- data/node_modules/util-deprecate/node.js +0 -6
- data/node_modules/util-deprecate/package.json +0 -27
- data/node_modules/wrappy/LICENSE +0 -15
- data/node_modules/wrappy/README.md +0 -36
- data/node_modules/wrappy/package.json +0 -29
- data/node_modules/wrappy/wrappy.js +0 -33
- data/node_modules/ws/LICENSE +0 -21
- data/node_modules/ws/README.md +0 -341
- data/node_modules/ws/index.js +0 -15
- data/node_modules/ws/lib/BufferUtil.js +0 -71
- data/node_modules/ws/lib/Constants.js +0 -10
- data/node_modules/ws/lib/ErrorCodes.js +0 -28
- data/node_modules/ws/lib/EventTarget.js +0 -151
- data/node_modules/ws/lib/Extensions.js +0 -203
- data/node_modules/ws/lib/PerMessageDeflate.js +0 -507
- data/node_modules/ws/lib/Receiver.js +0 -553
- data/node_modules/ws/lib/Sender.js +0 -412
- data/node_modules/ws/lib/Validation.js +0 -17
- data/node_modules/ws/lib/WebSocket.js +0 -717
- data/node_modules/ws/lib/WebSocketServer.js +0 -326
- data/node_modules/ws/package.json +0 -46
- data/node_modules/yauzl/LICENSE +0 -21
- data/node_modules/yauzl/README.md +0 -467
- data/node_modules/yauzl/index.js +0 -626
- data/node_modules/yauzl/package.json +0 -36
- data/package.json +0 -5
- data/yarn.lock +0 -240
@@ -1,202 +0,0 @@
|
|
1
|
-
|
2
|
-
Apache License
|
3
|
-
Version 2.0, January 2004
|
4
|
-
http://www.apache.org/licenses/
|
5
|
-
|
6
|
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
7
|
-
|
8
|
-
1. Definitions.
|
9
|
-
|
10
|
-
"License" shall mean the terms and conditions for use, reproduction,
|
11
|
-
and distribution as defined by Sections 1 through 9 of this document.
|
12
|
-
|
13
|
-
"Licensor" shall mean the copyright owner or entity authorized by
|
14
|
-
the copyright owner that is granting the License.
|
15
|
-
|
16
|
-
"Legal Entity" shall mean the union of the acting entity and all
|
17
|
-
other entities that control, are controlled by, or are under common
|
18
|
-
control with that entity. For the purposes of this definition,
|
19
|
-
"control" means (i) the power, direct or indirect, to cause the
|
20
|
-
direction or management of such entity, whether by contract or
|
21
|
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
22
|
-
outstanding shares, or (iii) beneficial ownership of such entity.
|
23
|
-
|
24
|
-
"You" (or "Your") shall mean an individual or Legal Entity
|
25
|
-
exercising permissions granted by this License.
|
26
|
-
|
27
|
-
"Source" form shall mean the preferred form for making modifications,
|
28
|
-
including but not limited to software source code, documentation
|
29
|
-
source, and configuration files.
|
30
|
-
|
31
|
-
"Object" form shall mean any form resulting from mechanical
|
32
|
-
transformation or translation of a Source form, including but
|
33
|
-
not limited to compiled object code, generated documentation,
|
34
|
-
and conversions to other media types.
|
35
|
-
|
36
|
-
"Work" shall mean the work of authorship, whether in Source or
|
37
|
-
Object form, made available under the License, as indicated by a
|
38
|
-
copyright notice that is included in or attached to the work
|
39
|
-
(an example is provided in the Appendix below).
|
40
|
-
|
41
|
-
"Derivative Works" shall mean any work, whether in Source or Object
|
42
|
-
form, that is based on (or derived from) the Work and for which the
|
43
|
-
editorial revisions, annotations, elaborations, or other modifications
|
44
|
-
represent, as a whole, an original work of authorship. For the purposes
|
45
|
-
of this License, Derivative Works shall not include works that remain
|
46
|
-
separable from, or merely link (or bind by name) to the interfaces of,
|
47
|
-
the Work and Derivative Works thereof.
|
48
|
-
|
49
|
-
"Contribution" shall mean any work of authorship, including
|
50
|
-
the original version of the Work and any modifications or additions
|
51
|
-
to that Work or Derivative Works thereof, that is intentionally
|
52
|
-
submitted to Licensor for inclusion in the Work by the copyright owner
|
53
|
-
or by an individual or Legal Entity authorized to submit on behalf of
|
54
|
-
the copyright owner. For the purposes of this definition, "submitted"
|
55
|
-
means any form of electronic, verbal, or written communication sent
|
56
|
-
to the Licensor or its representatives, including but not limited to
|
57
|
-
communication on electronic mailing lists, source code control systems,
|
58
|
-
and issue tracking systems that are managed by, or on behalf of, the
|
59
|
-
Licensor for the purpose of discussing and improving the Work, but
|
60
|
-
excluding communication that is conspicuously marked or otherwise
|
61
|
-
designated in writing by the copyright owner as "Not a Contribution."
|
62
|
-
|
63
|
-
"Contributor" shall mean Licensor and any individual or Legal Entity
|
64
|
-
on behalf of whom a Contribution has been received by Licensor and
|
65
|
-
subsequently incorporated within the Work.
|
66
|
-
|
67
|
-
2. Grant of Copyright License. Subject to the terms and conditions of
|
68
|
-
this License, each Contributor hereby grants to You a perpetual,
|
69
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
70
|
-
copyright license to reproduce, prepare Derivative Works of,
|
71
|
-
publicly display, publicly perform, sublicense, and distribute the
|
72
|
-
Work and such Derivative Works in Source or Object form.
|
73
|
-
|
74
|
-
3. Grant of Patent License. Subject to the terms and conditions of
|
75
|
-
this License, each Contributor hereby grants to You a perpetual,
|
76
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
77
|
-
(except as stated in this section) patent license to make, have made,
|
78
|
-
use, offer to sell, sell, import, and otherwise transfer the Work,
|
79
|
-
where such license applies only to those patent claims licensable
|
80
|
-
by such Contributor that are necessarily infringed by their
|
81
|
-
Contribution(s) alone or by combination of their Contribution(s)
|
82
|
-
with the Work to which such Contribution(s) was submitted. If You
|
83
|
-
institute patent litigation against any entity (including a
|
84
|
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
85
|
-
or a Contribution incorporated within the Work constitutes direct
|
86
|
-
or contributory patent infringement, then any patent licenses
|
87
|
-
granted to You under this License for that Work shall terminate
|
88
|
-
as of the date such litigation is filed.
|
89
|
-
|
90
|
-
4. Redistribution. You may reproduce and distribute copies of the
|
91
|
-
Work or Derivative Works thereof in any medium, with or without
|
92
|
-
modifications, and in Source or Object form, provided that You
|
93
|
-
meet the following conditions:
|
94
|
-
|
95
|
-
(a) You must give any other recipients of the Work or
|
96
|
-
Derivative Works a copy of this License; and
|
97
|
-
|
98
|
-
(b) You must cause any modified files to carry prominent notices
|
99
|
-
stating that You changed the files; and
|
100
|
-
|
101
|
-
(c) You must retain, in the Source form of any Derivative Works
|
102
|
-
that You distribute, all copyright, patent, trademark, and
|
103
|
-
attribution notices from the Source form of the Work,
|
104
|
-
excluding those notices that do not pertain to any part of
|
105
|
-
the Derivative Works; and
|
106
|
-
|
107
|
-
(d) If the Work includes a "NOTICE" text file as part of its
|
108
|
-
distribution, then any Derivative Works that You distribute must
|
109
|
-
include a readable copy of the attribution notices contained
|
110
|
-
within such NOTICE file, excluding those notices that do not
|
111
|
-
pertain to any part of the Derivative Works, in at least one
|
112
|
-
of the following places: within a NOTICE text file distributed
|
113
|
-
as part of the Derivative Works; within the Source form or
|
114
|
-
documentation, if provided along with the Derivative Works; or,
|
115
|
-
within a display generated by the Derivative Works, if and
|
116
|
-
wherever such third-party notices normally appear. The contents
|
117
|
-
of the NOTICE file are for informational purposes only and
|
118
|
-
do not modify the License. You may add Your own attribution
|
119
|
-
notices within Derivative Works that You distribute, alongside
|
120
|
-
or as an addendum to the NOTICE text from the Work, provided
|
121
|
-
that such additional attribution notices cannot be construed
|
122
|
-
as modifying the License.
|
123
|
-
|
124
|
-
You may add Your own copyright statement to Your modifications and
|
125
|
-
may provide additional or different license terms and conditions
|
126
|
-
for use, reproduction, or distribution of Your modifications, or
|
127
|
-
for any such Derivative Works as a whole, provided Your use,
|
128
|
-
reproduction, and distribution of the Work otherwise complies with
|
129
|
-
the conditions stated in this License.
|
130
|
-
|
131
|
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
132
|
-
any Contribution intentionally submitted for inclusion in the Work
|
133
|
-
by You to the Licensor shall be under the terms and conditions of
|
134
|
-
this License, without any additional terms or conditions.
|
135
|
-
Notwithstanding the above, nothing herein shall supersede or modify
|
136
|
-
the terms of any separate license agreement you may have executed
|
137
|
-
with Licensor regarding such Contributions.
|
138
|
-
|
139
|
-
6. Trademarks. This License does not grant permission to use the trade
|
140
|
-
names, trademarks, service marks, or product names of the Licensor,
|
141
|
-
except as required for reasonable and customary use in describing the
|
142
|
-
origin of the Work and reproducing the content of the NOTICE file.
|
143
|
-
|
144
|
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
145
|
-
agreed to in writing, Licensor provides the Work (and each
|
146
|
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
147
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
148
|
-
implied, including, without limitation, any warranties or conditions
|
149
|
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
150
|
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
151
|
-
appropriateness of using or redistributing the Work and assume any
|
152
|
-
risks associated with Your exercise of permissions under this License.
|
153
|
-
|
154
|
-
8. Limitation of Liability. In no event and under no legal theory,
|
155
|
-
whether in tort (including negligence), contract, or otherwise,
|
156
|
-
unless required by applicable law (such as deliberate and grossly
|
157
|
-
negligent acts) or agreed to in writing, shall any Contributor be
|
158
|
-
liable to You for damages, including any direct, indirect, special,
|
159
|
-
incidental, or consequential damages of any character arising as a
|
160
|
-
result of this License or out of the use or inability to use the
|
161
|
-
Work (including but not limited to damages for loss of goodwill,
|
162
|
-
work stoppage, computer failure or malfunction, or any and all
|
163
|
-
other commercial damages or losses), even if such Contributor
|
164
|
-
has been advised of the possibility of such damages.
|
165
|
-
|
166
|
-
9. Accepting Warranty or Additional Liability. While redistributing
|
167
|
-
the Work or Derivative Works thereof, You may choose to offer,
|
168
|
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
169
|
-
or other liability obligations and/or rights consistent with this
|
170
|
-
License. However, in accepting such obligations, You may act only
|
171
|
-
on Your own behalf and on Your sole responsibility, not on behalf
|
172
|
-
of any other Contributor, and only if You agree to indemnify,
|
173
|
-
defend, and hold each Contributor harmless for any liability
|
174
|
-
incurred by, or claims asserted against, such Contributor by reason
|
175
|
-
of your accepting any such warranty or additional liability.
|
176
|
-
|
177
|
-
END OF TERMS AND CONDITIONS
|
178
|
-
|
179
|
-
APPENDIX: How to apply the Apache License to your work.
|
180
|
-
|
181
|
-
To apply the Apache License to your work, attach the following
|
182
|
-
boilerplate notice, with the fields enclosed by brackets "[]"
|
183
|
-
replaced with your own identifying information. (Don't include
|
184
|
-
the brackets!) The text should be enclosed in the appropriate
|
185
|
-
comment syntax for the file format. We also recommend that a
|
186
|
-
file or class name and description of purpose be included on the
|
187
|
-
same "printed page" as the copyright notice for easier
|
188
|
-
identification within third-party archives.
|
189
|
-
|
190
|
-
Copyright 2017 Google Inc.
|
191
|
-
|
192
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
193
|
-
you may not use this file except in compliance with the License.
|
194
|
-
You may obtain a copy of the License at
|
195
|
-
|
196
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
197
|
-
|
198
|
-
Unless required by applicable law or agreed to in writing, software
|
199
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
200
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
201
|
-
See the License for the specific language governing permissions and
|
202
|
-
limitations under the License.
|
@@ -1,306 +0,0 @@
|
|
1
|
-
# Puppeteer
|
2
|
-
|
3
|
-
<!-- [START badges] -->
|
4
|
-
[![Linux Build Status](https://img.shields.io/travis/GoogleChrome/puppeteer/master.svg)](https://travis-ci.org/GoogleChrome/puppeteer) [![Windows Build Status](https://img.shields.io/appveyor/ci/aslushnikov/puppeteer/master.svg?logo=appveyor)](https://ci.appveyor.com/project/aslushnikov/puppeteer/branch/master) [![Build Status](https://api.cirrus-ci.com/github/GoogleChrome/puppeteer.svg)](https://cirrus-ci.com/github/GoogleChrome/puppeteer) [![NPM puppeteer package](https://img.shields.io/npm/v/puppeteer.svg)](https://npmjs.org/package/puppeteer)
|
5
|
-
<!-- [END badges] -->
|
6
|
-
|
7
|
-
<img src="https://user-images.githubusercontent.com/10379601/29446482-04f7036a-841f-11e7-9872-91d1fc2ea683.png" height="200" align="right">
|
8
|
-
|
9
|
-
###### <!-- gen:last-released-api -->[API](https://github.com/GoogleChrome/puppeteer/blob/v1.4.0/docs/api.md)<!-- gen:stop --> | [FAQ](#faq) | [Contributing](https://github.com/GoogleChrome/puppeteer/blob/master/CONTRIBUTING.md)
|
10
|
-
|
11
|
-
> Puppeteer is a Node library which provides a high-level API to control [headless](https://developers.google.com/web/updates/2017/04/headless-chrome) Chrome or Chromium over the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/). It can also be configured to use full (non-headless) Chrome or Chromium.
|
12
|
-
|
13
|
-
<!-- [START usecases] -->
|
14
|
-
###### What can I do?
|
15
|
-
|
16
|
-
Most things that you can do manually in the browser can be done using Puppeteer! Here are a few examples to get you started:
|
17
|
-
|
18
|
-
* Generate screenshots and PDFs of pages.
|
19
|
-
* Crawl a SPA and generate pre-rendered content (i.e. "SSR").
|
20
|
-
* Automate form submission, UI testing, keyboard input, etc.
|
21
|
-
* Create an up-to-date, automated testing environment. Run your tests directly in the latest version of Chrome using the latest JavaScript and browser features.
|
22
|
-
* Capture a [timeline trace](https://developers.google.com/web/tools/chrome-devtools/evaluate-performance/reference) of your site to help diagnose performance issues.
|
23
|
-
<!-- [END usecases] -->
|
24
|
-
|
25
|
-
Give it a spin: https://try-puppeteer.appspot.com/
|
26
|
-
|
27
|
-
<!-- [START getstarted] -->
|
28
|
-
## Getting Started
|
29
|
-
|
30
|
-
### Installation
|
31
|
-
|
32
|
-
To use Puppeteer in your project, run:
|
33
|
-
|
34
|
-
```bash
|
35
|
-
npm i puppeteer
|
36
|
-
# or "yarn add puppeteer"
|
37
|
-
```
|
38
|
-
|
39
|
-
Note: When you install Puppeteer, it downloads a recent version of Chromium (~170Mb Mac, ~282Mb Linux, ~280Mb Win) that is guaranteed to work with the API. To skip the download, see [Environment variables](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#environment-variables).
|
40
|
-
|
41
|
-
### Usage
|
42
|
-
|
43
|
-
Caution: Puppeteer requires at least Node v6.4.0, but the examples below use async/await which is only supported in Node v7.6.0 or greater.
|
44
|
-
|
45
|
-
Puppeteer will be familiar to people using other browser testing frameworks. You create an instance
|
46
|
-
of `Browser`, open pages, and then manipulate them with [Puppeteer's API](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#).
|
47
|
-
|
48
|
-
**Example** - navigating to https://example.com and saving a screenshot as *example.png*:
|
49
|
-
|
50
|
-
Save file as **example.js**
|
51
|
-
|
52
|
-
```js
|
53
|
-
const puppeteer = require('puppeteer');
|
54
|
-
|
55
|
-
(async () => {
|
56
|
-
const browser = await puppeteer.launch();
|
57
|
-
const page = await browser.newPage();
|
58
|
-
await page.goto('https://example.com');
|
59
|
-
await page.screenshot({path: 'example.png'});
|
60
|
-
|
61
|
-
await browser.close();
|
62
|
-
})();
|
63
|
-
```
|
64
|
-
|
65
|
-
Execute script on the command line
|
66
|
-
|
67
|
-
```bash
|
68
|
-
node example.js
|
69
|
-
```
|
70
|
-
|
71
|
-
Puppeteer sets an initial page size to 800px x 600px, which defines the screenshot size. The page size can be customized with [`Page.setViewport()`](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetviewportviewport).
|
72
|
-
|
73
|
-
**Example** - create a PDF.
|
74
|
-
|
75
|
-
Save file as **hn.js**
|
76
|
-
|
77
|
-
```js
|
78
|
-
const puppeteer = require('puppeteer');
|
79
|
-
|
80
|
-
(async () => {
|
81
|
-
const browser = await puppeteer.launch();
|
82
|
-
const page = await browser.newPage();
|
83
|
-
await page.goto('https://news.ycombinator.com', {waitUntil: 'networkidle2'});
|
84
|
-
await page.pdf({path: 'hn.pdf', format: 'A4'});
|
85
|
-
|
86
|
-
await browser.close();
|
87
|
-
})();
|
88
|
-
```
|
89
|
-
|
90
|
-
Execute script on the command line
|
91
|
-
|
92
|
-
```bash
|
93
|
-
node hn.js
|
94
|
-
```
|
95
|
-
|
96
|
-
See [`Page.pdf()`](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagepdfoptions) for more information about creating pdfs.
|
97
|
-
|
98
|
-
**Example** - evaluate script in the context of the page
|
99
|
-
|
100
|
-
Save file as **get-dimensions.js**
|
101
|
-
|
102
|
-
```js
|
103
|
-
const puppeteer = require('puppeteer');
|
104
|
-
|
105
|
-
(async () => {
|
106
|
-
const browser = await puppeteer.launch();
|
107
|
-
const page = await browser.newPage();
|
108
|
-
await page.goto('https://example.com');
|
109
|
-
|
110
|
-
// Get the "viewport" of the page, as reported by the page.
|
111
|
-
const dimensions = await page.evaluate(() => {
|
112
|
-
return {
|
113
|
-
width: document.documentElement.clientWidth,
|
114
|
-
height: document.documentElement.clientHeight,
|
115
|
-
deviceScaleFactor: window.devicePixelRatio
|
116
|
-
};
|
117
|
-
});
|
118
|
-
|
119
|
-
console.log('Dimensions:', dimensions);
|
120
|
-
|
121
|
-
await browser.close();
|
122
|
-
})();
|
123
|
-
```
|
124
|
-
|
125
|
-
Execute script on the command line
|
126
|
-
|
127
|
-
```bash
|
128
|
-
node get-dimensions.js
|
129
|
-
```
|
130
|
-
|
131
|
-
See [`Page.evaluate()`](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pageevaluatepagefunction-args) for more information on `evaluate` and related methods like `evaluateOnNewDocument` and `exposeFunction`.
|
132
|
-
|
133
|
-
<!-- [END getstarted] -->
|
134
|
-
|
135
|
-
<!-- [START runtimesettings] -->
|
136
|
-
## Default runtime settings
|
137
|
-
|
138
|
-
**1. Uses Headless mode**
|
139
|
-
|
140
|
-
Puppeteer launches Chromium in [headless mode](https://developers.google.com/web/updates/2017/04/headless-chrome). To launch a full version of Chromium, set the ['headless' option](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions) when launching a browser:
|
141
|
-
|
142
|
-
```js
|
143
|
-
const browser = await puppeteer.launch({headless: false}); // default is true
|
144
|
-
```
|
145
|
-
|
146
|
-
**2. Runs a bundled version of Chromium**
|
147
|
-
|
148
|
-
By default, Puppeteer downloads and uses a specific version of Chromium so its API
|
149
|
-
is guaranteed to work out of the box. To use Puppeteer with a different version of Chrome or Chromium,
|
150
|
-
pass in the executable's path when creating a `Browser` instance:
|
151
|
-
|
152
|
-
```js
|
153
|
-
const browser = await puppeteer.launch({executablePath: '/path/to/Chrome'});
|
154
|
-
```
|
155
|
-
|
156
|
-
See [`Puppeteer.launch()`](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions) for more information.
|
157
|
-
|
158
|
-
See [`this article`](https://www.howtogeek.com/202825/what%E2%80%99s-the-difference-between-chromium-and-chrome/) for a description of the differences between Chromium and Chrome. [`This article`](https://chromium.googlesource.com/chromium/src/+/lkcr/docs/chromium_browser_vs_google_chrome.md) describes some differences for Linux users.
|
159
|
-
|
160
|
-
**3. Creates a fresh user profile**
|
161
|
-
|
162
|
-
Puppeteer creates its own Chromium user profile which it **cleans up on every run**.
|
163
|
-
|
164
|
-
<!-- [END runtimesettings] -->
|
165
|
-
|
166
|
-
## API Documentation
|
167
|
-
|
168
|
-
Explore the [API documentation](docs/api.md) and [examples](https://github.com/GoogleChrome/puppeteer/tree/master/examples/) to learn more.
|
169
|
-
|
170
|
-
<!-- [START debugging] -->
|
171
|
-
|
172
|
-
## Debugging tips
|
173
|
-
|
174
|
-
1. Turn off headless mode - sometimes it's useful to see what the browser is
|
175
|
-
displaying. Instead of launching in headless mode, launch a full version of
|
176
|
-
the browser using `headless: false`:
|
177
|
-
|
178
|
-
const browser = await puppeteer.launch({headless: false});
|
179
|
-
|
180
|
-
2. Slow it down - the `slowMo` option slows down Puppeteer operations by the
|
181
|
-
specified amount of milliseconds. It's another way to help see what's going on.
|
182
|
-
|
183
|
-
const browser = await puppeteer.launch({
|
184
|
-
headless: false,
|
185
|
-
slowMo: 250 // slow down by 250ms
|
186
|
-
});
|
187
|
-
|
188
|
-
3. Capture console output - You can listen for the `console` event.
|
189
|
-
This is also handy when debugging code in `page.evaluate()`:
|
190
|
-
|
191
|
-
page.on('console', msg => console.log('PAGE LOG:', msg.text()));
|
192
|
-
|
193
|
-
await page.evaluate(() => console.log(`url is ${location.href}`));
|
194
|
-
|
195
|
-
await page.evaluate(() => console.log(`url is ${location.href}`));
|
196
|
-
|
197
|
-
4. Stop test execution and use a debugger in browser
|
198
|
-
|
199
|
-
- Use `{devtools: true}` when launching Puppeteer:
|
200
|
-
|
201
|
-
`const browser = await puppeteer.launch({devtools: true});`
|
202
|
-
|
203
|
-
- Change default test timeout:
|
204
|
-
|
205
|
-
jest: `jest.setTimeout(100000);`
|
206
|
-
|
207
|
-
jasmine: `jasmine.DEFAULT_TIMEOUT_INTERVAL = 100000;`
|
208
|
-
|
209
|
-
mocha: `this.timeout(100000);` (don't forget to change test to use [function and not '=>'](https://stackoverflow.com/a/23492442))
|
210
|
-
|
211
|
-
- Add an evaluate statement with `debugger` inside / add `debugger` to an existing evaluate statement:
|
212
|
-
|
213
|
-
`await page.evaluate(() => {debugger;});`
|
214
|
-
|
215
|
-
The test will now stop executing in the above evaluate statement, and chromium will stop in debug mode.
|
216
|
-
|
217
|
-
5. Enable verbose logging - All public API calls and internal protocol traffic
|
218
|
-
will be logged via the [`debug`](https://github.com/visionmedia/debug) module under the `puppeteer` namespace.
|
219
|
-
|
220
|
-
# Basic verbose logging
|
221
|
-
env DEBUG="puppeteer:*" node script.js
|
222
|
-
|
223
|
-
# Debug output can be enabled/disabled by namespace
|
224
|
-
env DEBUG="puppeteer:*,-puppeteer:protocol" node script.js # everything BUT protocol messages
|
225
|
-
env DEBUG="puppeteer:session" node script.js # protocol session messages (protocol messages to targets)
|
226
|
-
env DEBUG="puppeteer:mouse,puppeteer:keyboard" node script.js # only Mouse and Keyboard API calls
|
227
|
-
|
228
|
-
# Protocol traffic can be rather noisy. This example filters out all Network domain messages
|
229
|
-
env DEBUG="puppeteer:*" env DEBUG_COLORS=true node script.js 2>&1 | grep -v '"Network'
|
230
|
-
|
231
|
-
<!-- [END debugging] -->
|
232
|
-
|
233
|
-
## Contributing to Puppeteer
|
234
|
-
|
235
|
-
Check out [contributing guide](https://github.com/GoogleChrome/puppeteer/blob/master/CONTRIBUTING.md) to get an overview of Puppeteer development.
|
236
|
-
|
237
|
-
<!-- [START faq] -->
|
238
|
-
|
239
|
-
# FAQ
|
240
|
-
|
241
|
-
#### Q: Which Chromium version does Puppeteer use?
|
242
|
-
|
243
|
-
Look for `chromium_revision` in [package.json](https://github.com/GoogleChrome/puppeteer/blob/master/package.json).
|
244
|
-
|
245
|
-
Puppeteer bundles Chromium to ensure that the latest features it uses are guaranteed to be available. As the DevTools protocol and browser improve over time, Puppeteer will be updated to depend on newer versions of Chromium.
|
246
|
-
|
247
|
-
#### Q: What is the difference between Puppeteer, Selenium / WebDriver, and PhantomJS?
|
248
|
-
|
249
|
-
Selenium / WebDriver is a well-established cross-browser API that is useful for testing cross-browser support.
|
250
|
-
|
251
|
-
Puppeteer works only with Chromium or Chrome. However, many teams only run unit tests with a single browser (e.g. PhantomJS). In non-testing use cases, Puppeteer provides a powerful but simple API because it's only targeting one browser that enables you to rapidly develop automation scripts.
|
252
|
-
|
253
|
-
Puppeteer bundles the latest versions of Chromium.
|
254
|
-
|
255
|
-
#### Q: Who maintains Puppeteer?
|
256
|
-
|
257
|
-
The Chrome DevTools team maintains the library, but we'd love your help and expertise on the project!
|
258
|
-
See [Contributing](https://github.com/GoogleChrome/puppeteer/blob/master/CONTRIBUTING.md).
|
259
|
-
|
260
|
-
#### Q: Why is the Chrome team building Puppeteer?
|
261
|
-
|
262
|
-
The goals of the project are simple:
|
263
|
-
|
264
|
-
- Provide a slim, canonical library that highlights the capabilities of the [DevTools Protocol](https://chromedevtools.github.io/devtools-protocol/).
|
265
|
-
- Provide a reference implementation for similar testing libraries. Eventually, these other frameworks could adopt Puppeteer as their foundational layer.
|
266
|
-
- Grow the adoption of headless/automated browser testing.
|
267
|
-
- Help dogfood new DevTools Protocol features...and catch bugs!
|
268
|
-
- Learn more about the pain points of automated browser testing and help fill those gaps.
|
269
|
-
|
270
|
-
#### Q: How does Puppeteer compare with other headless Chrome projects?
|
271
|
-
|
272
|
-
The past few months have brought [several new libraries for automating headless Chrome](https://medium.com/@kensoh/chromeless-chrominator-chromy-navalia-lambdium-ghostjs-autogcd-ef34bcd26907). As the team authoring the underlying DevTools Protocol, we're excited to witness and support this flourishing ecosystem.
|
273
|
-
|
274
|
-
We've reached out to a number of these projects to see if there are opportunities for collaboration, and we're happy to do what we can to help.
|
275
|
-
|
276
|
-
#### Q: What features does Puppeteer not support?
|
277
|
-
|
278
|
-
You may find that Puppeteer does not behave as expected when controlling pages that incorporate audio and video. (For example, [video playback/screenshots is likely to fail](https://github.com/GoogleChrome/puppeteer/issues/291).) There are two reasons for this:
|
279
|
-
|
280
|
-
* Puppeteer is bundled with Chromium--not Chrome--and so by default, it inherits all of [Chromium's media-related limitations](https://www.chromium.org/audio-video). This means that Puppeteer does not support licensed formats such as AAC or H.264. (However, it is possible to force Puppeteer to use a separately-installed version Chrome instead of Chromium via the [`executablePath` option to `puppeteer.launch`](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions). You should only use this configuration if you need an official release of Chrome that supports these media formats.)
|
281
|
-
* Since Puppeteer (in all configurations) controls a desktop version of Chromium/Chrome, features that are only supported by the mobile version of Chrome are not supported. This means that Puppeteer [does not support HTTP Live Streaming (HLS)](https://caniuse.com/#feat=http-live-streaming).
|
282
|
-
|
283
|
-
#### Q: I am having trouble installing / running Puppeteer in my test environment?
|
284
|
-
We have a [troubleshooting](https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md) guide for various operating systems that lists the required dependencies.
|
285
|
-
|
286
|
-
#### Q: How do I try/test a prerelease version of Puppeteer?
|
287
|
-
|
288
|
-
You can check out this repo or install the latest prerelease from npm:
|
289
|
-
|
290
|
-
```bash
|
291
|
-
npm i --save puppeteer@next
|
292
|
-
```
|
293
|
-
|
294
|
-
Please note that prerelease may be unstable and contain bugs.
|
295
|
-
|
296
|
-
#### Q: I have more questions! Where do I ask?
|
297
|
-
|
298
|
-
There are many ways to get help on Puppeteer:
|
299
|
-
- [bugtracker](https://github.com/GoogleChrome/puppeteer/issues)
|
300
|
-
- [stackoverflow](https://stackoverflow.com/questions/tagged/puppeteer)
|
301
|
-
- [slack channel](https://join.slack.com/t/puppeteer/shared_invite/enQtMzAyOTU1MzQyOTQ1LTUzOTAxNjE5YWI0YzNmYmRkN2I4MDg2MzI4OGE3YWNhZDBlYWMyNTlmOTJlN2RhYzlmODI4ZDQxZGEyMGIwNDY)
|
302
|
-
|
303
|
-
Make sure to search these channels before posting your question.
|
304
|
-
|
305
|
-
|
306
|
-
<!-- [END faq] -->
|
@@ -1,28 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright 2017 Google Inc. All rights reserved.
|
3
|
-
*
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
* you may not use this file except in compliance with the License.
|
6
|
-
* You may obtain a copy of the License at
|
7
|
-
*
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
*
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
* See the License for the specific language governing permissions and
|
14
|
-
* limitations under the License.
|
15
|
-
*/
|
16
|
-
|
17
|
-
let asyncawait = true;
|
18
|
-
try {
|
19
|
-
new Function('async function test(){await 1}');
|
20
|
-
} catch (error) {
|
21
|
-
asyncawait = false;
|
22
|
-
}
|
23
|
-
|
24
|
-
// If node does not support async await, use the compiled version.
|
25
|
-
if (asyncawait)
|
26
|
-
module.exports = require('./lib/Puppeteer');
|
27
|
-
else
|
28
|
-
module.exports = require('./node6/lib/Puppeteer');
|
@@ -1,122 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Copyright 2017 Google Inc. All rights reserved.
|
3
|
-
*
|
4
|
-
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
-
* you may not use this file except in compliance with the License.
|
6
|
-
* You may obtain a copy of the License at
|
7
|
-
*
|
8
|
-
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
-
*
|
10
|
-
* Unless required by applicable law or agreed to in writing, software
|
11
|
-
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
-
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
-
* See the License for the specific language governing permissions and
|
14
|
-
* limitations under the License.
|
15
|
-
*/
|
16
|
-
|
17
|
-
buildNode6IfNecessary();
|
18
|
-
|
19
|
-
if (process.env.PUPPETEER_SKIP_CHROMIUM_DOWNLOAD) {
|
20
|
-
console.log('**INFO** Skipping Chromium download. "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" environment variable was found.');
|
21
|
-
return;
|
22
|
-
}
|
23
|
-
if (process.env.NPM_CONFIG_PUPPETEER_SKIP_CHROMIUM_DOWNLOAD || process.env.npm_config_puppeteer_skip_chromium_download) {
|
24
|
-
console.log('**INFO** Skipping Chromium download. "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" was set in npm config.');
|
25
|
-
return;
|
26
|
-
}
|
27
|
-
|
28
|
-
const downloadHost = process.env.PUPPETEER_DOWNLOAD_HOST || process.env.npm_config_puppeteer_download_host;
|
29
|
-
|
30
|
-
const puppeteer = require('./index');
|
31
|
-
const browserFetcher = puppeteer.createBrowserFetcher({ host: downloadHost });
|
32
|
-
|
33
|
-
const revision = process.env.PUPPETEER_CHROMIUM_REVISION || process.env.npm_config_puppeteer_chromium_revision
|
34
|
-
|| require('./package.json').puppeteer.chromium_revision;
|
35
|
-
|
36
|
-
const revisionInfo = browserFetcher.revisionInfo(revision);
|
37
|
-
|
38
|
-
// Do nothing if the revision is already downloaded.
|
39
|
-
if (revisionInfo.local)
|
40
|
-
return;
|
41
|
-
|
42
|
-
// Override current environment proxy settings with npm configuration, if any.
|
43
|
-
const NPM_HTTPS_PROXY = process.env.npm_config_https_proxy || process.env.npm_config_proxy;
|
44
|
-
const NPM_HTTP_PROXY = process.env.npm_config_http_proxy || process.env.npm_config_proxy;
|
45
|
-
const NPM_NO_PROXY = process.env.npm_config_no_proxy;
|
46
|
-
|
47
|
-
if (NPM_HTTPS_PROXY)
|
48
|
-
process.env.HTTPS_PROXY = NPM_HTTPS_PROXY;
|
49
|
-
if (NPM_HTTP_PROXY)
|
50
|
-
process.env.HTTP_PROXY = NPM_HTTP_PROXY;
|
51
|
-
if (NPM_NO_PROXY)
|
52
|
-
process.env.NO_PROXY = NPM_NO_PROXY;
|
53
|
-
|
54
|
-
browserFetcher.download(revisionInfo.revision, onProgress)
|
55
|
-
.then(() => browserFetcher.localRevisions())
|
56
|
-
.then(onSuccess)
|
57
|
-
.catch(onError);
|
58
|
-
|
59
|
-
/**
|
60
|
-
* @param {!Array<string>}
|
61
|
-
* @return {!Promise}
|
62
|
-
*/
|
63
|
-
function onSuccess(localRevisions) {
|
64
|
-
console.log('Chromium downloaded to ' + revisionInfo.folderPath);
|
65
|
-
localRevisions = localRevisions.filter(revision => revision !== revisionInfo.revision);
|
66
|
-
// Remove previous chromium revisions.
|
67
|
-
const cleanupOldVersions = localRevisions.map(revision => browserFetcher.remove(revision));
|
68
|
-
return Promise.all(cleanupOldVersions);
|
69
|
-
}
|
70
|
-
|
71
|
-
/**
|
72
|
-
* @param {!Error} error
|
73
|
-
*/
|
74
|
-
function onError(error) {
|
75
|
-
console.error(`ERROR: Failed to download Chromium r${revision}! Set "PUPPETEER_SKIP_CHROMIUM_DOWNLOAD" env variable to skip download.`);
|
76
|
-
console.error(error);
|
77
|
-
process.exit(1);
|
78
|
-
}
|
79
|
-
|
80
|
-
let progressBar = null;
|
81
|
-
let lastDownloadedBytes = 0;
|
82
|
-
function onProgress(downloadedBytes, totalBytes) {
|
83
|
-
if (!progressBar) {
|
84
|
-
const ProgressBar = require('progress');
|
85
|
-
progressBar = new ProgressBar(`Downloading Chromium r${revision} - ${toMegabytes(totalBytes)} [:bar] :percent :etas `, {
|
86
|
-
complete: '=',
|
87
|
-
incomplete: ' ',
|
88
|
-
width: 20,
|
89
|
-
total: totalBytes,
|
90
|
-
});
|
91
|
-
}
|
92
|
-
const delta = downloadedBytes - lastDownloadedBytes;
|
93
|
-
lastDownloadedBytes = downloadedBytes;
|
94
|
-
progressBar.tick(delta);
|
95
|
-
}
|
96
|
-
|
97
|
-
function toMegabytes(bytes) {
|
98
|
-
const mb = bytes / 1024 / 1024;
|
99
|
-
return `${Math.round(mb * 10) / 10} Mb`;
|
100
|
-
}
|
101
|
-
|
102
|
-
function buildNode6IfNecessary() {
|
103
|
-
const fs = require('fs');
|
104
|
-
const path = require('path');
|
105
|
-
|
106
|
-
// if this package is installed from NPM, then it already has up-to-date node6
|
107
|
-
// folder.
|
108
|
-
if (!fs.existsSync(path.join('utils', 'node6-transform')))
|
109
|
-
return;
|
110
|
-
let asyncawait = true;
|
111
|
-
try {
|
112
|
-
new Function('async function test(){await 1}');
|
113
|
-
} catch (error) {
|
114
|
-
asyncawait = false;
|
115
|
-
}
|
116
|
-
// if async/await is supported, then node6 is not needed.
|
117
|
-
if (asyncawait)
|
118
|
-
return;
|
119
|
-
// Re-build node6/ folder.
|
120
|
-
console.log('Building Puppeteer for Node 6');
|
121
|
-
require(path.join(__dirname, 'utils', 'node6-transform'));
|
122
|
-
}
|