Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bjrmatos/chrome-page-eval
Evaluate a script function on a page with Chrome 🔮
https://github.com/bjrmatos/chrome-page-eval
chrome eval puppeteer
Last synced: about 2 months ago
JSON representation
Evaluate a script function on a page with Chrome 🔮
- Host: GitHub
- URL: https://github.com/bjrmatos/chrome-page-eval
- Owner: bjrmatos
- License: mit
- Created: 2018-03-01T18:51:09.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-14T22:21:16.000Z (10 months ago)
- Last Synced: 2024-04-15T01:57:04.421Z (9 months ago)
- Topics: chrome, eval, puppeteer
- Language: JavaScript
- Size: 47.9 KB
- Stars: 8
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# chrome-page-eval
[![NPM Version](http://img.shields.io/npm/v/chrome-page-eval.svg?style=flat-square)](https://npmjs.com/package/chrome-page-eval)
[![License](http://img.shields.io/npm/l/chrome-page-eval.svg?style=flat-square)](http://opensource.org/licenses/MIT)
[![Build Status](https://travis-ci.org/bjrmatos/chrome-page-eval.png?branch=master)](https://travis-ci.org/bjrmatos/chrome-page-eval)> **Evaluate a script function on a page with Chrome**
This module let you evaluate a script function on a page using Chrome (controlled with [puppeteer](https://github.com/GoogleChrome/puppeteer)) and get the return value of the evaluation in node.
## Usage
```html
Test page
1
2
3
4```
```js
const puppeteer = require('puppeteer')
const chromePageEval = require('chrome-page-eval')
const chromeEval = chromePageEval({ puppeteer })(async () => {
try {
const result = await chromeEval({
html: '/path/to/sample.html',
scriptFn: `
function () {
let title = document.titlelet content = Array.from(document.querySelectorAll('.content'), (node) => {
return node.textContent
})return {
title,
content
}
}
`
})console.log(result.title) // -> Test page
console.log(result.content) // -> [1, 2, 3, 4]
} catch (e) {
console.error('Error while trying to evaluate script:', e)
}
})()
```## Constructor options
```js
const chromePageEval = require('chrome-page-eval')
const chromeEval = chromePageEval({ /*[constructor options here]*/ })
```- `puppeteer` **[required]** - the exported module from [puppeteer](https://github.com/GoogleChrome/puppeteer) that your app is going to use
- properties with [any of the launch options supported by puppeteer](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#puppeteerlaunchoptions)## Evaluate options
```js
const puppeteer = require('puppeteer')
const chromePageEval = require('chrome-page-eval')
const chromeEval = chromePageEval({ puppeteer })(async () => {
const result = await chromeEval({ /*[evaluate options here]*/ })
})()
```- `html` **string** **[required]** - the path to the html file to load in a Chrome page
- `scriptFn` **string** **[required]** - the script to evaluate in the Chrome page. the script must be a function that returns a value. ex: `scriptFn: 'function () { return 1 + 2}'`
- `viewport` **object** - object with [any of the viewport options supported by puppeteer](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagesetviewportviewport)
- `args` **array** - a list of custom arguments to pass to the `scriptFn` function. ex: `args: [1, 2]` and with `scriptFn: function (a, b) { return a + b}'` will produce `3` as result
- `styles` **array** - array of css strings to insert at the beginning of page's head element. ex: `styles: ['* { font-family: 'Calibri'; font-size: 16px; }']`
- `waitForJS` **boolean** - when `true` the `scriptFn` won't be executed until the variable specified in `waitForJSVarName` option is set to true in page's javscript. defaults to `false`
- `waitForJSVarName` **string** - name of the variable that will be used as trigger of `scriptFn`. defaults to `"CHROME_PAGE_EVAL_READY"`
- `waitUntil` **string** - a value that specifies when a page is considered to be loaded, [for the list of all possible values and its meanings see `waitUntil` option in puppeteer docs](https://github.com/GoogleChrome/puppeteer/blob/master/docs/api.md#pagegotourl-options). defaults to the the default value of puppeteer
- `timeout` **number** - time in ms to wait for the script evaluation to complete, when the timeout is reached the evaluation is cancelled. defaults to `30000`## Requirements
- Install puppeteer >= 1.0.0 with `npm install puppeteer --save` in your project and pass it to `chrome-page-eval` constructor function.
## Caveats
- What you return in your script function (`scriptFn` option) must be a [serializable value](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#Description) in order to receive it properly, if a non serializable value is returned you will get `undefined` as the result.
## Debugging
- To get more information (internal debugging logs of the module) about what's happening during the evaluation on the page start your app in this way: `DEBUG=chrome-page-eval* node [your-entry-file-here].js` (on Windows use `set DEBUG=chrome-page-eval* && node [your-entry-file-here].js`). This will print out to the console some additional information about what's going on.
- To see the Chrome instance created (the visible chrome window) run your app with the `CHROME_PAGE_EVAL_DEBUGGING` env var: `CHROME_PAGE_EVAL_DEBUGGING=true node [your-entry-file-here].js` (on Windows use `set CHROME_PAGE_EVAL_DEBUGGING=true && node [your-entry-file-here].js`).
## License
See [license](https://github.com/bjrmatos/chrome-page-eval/blob/master/LICENSE)