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) and get the return value of the evaluation in node.
<!-- sample.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test page</title>
</head>
<body>
<div class="content">1</div>
<div class="content">2</div>
<div class="content">3</div>
<div class="content">4</div>
</body>
</html>
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.title
let 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)
}
})()
const chromePageEval = require('chrome-page-eval')
const chromeEval = chromePageEval({ /*[constructor options here]*/ })
puppeteer
[required] - the exported module from puppeteer that your app is going to use- properties with any of the launch options supported by puppeteer
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 pagescriptFn
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 puppeteerargs
array - a list of custom arguments to pass to thescriptFn
function. ex:args: [1, 2]
and withscriptFn: function (a, b) { return a + b}'
will produce3
as resultstyles
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 - whentrue
thescriptFn
won't be executed until the variable specified inwaitForJSVarName
option is set to true in page's javscript. defaults tofalse
waitForJSVarName
string - name of the variable that will be used as trigger ofscriptFn
. 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 seewaitUntil
option in puppeteer docs. defaults to the the default value of puppeteertimeout
number - time in ms to wait for the script evaluation to complete, when the timeout is reached the evaluation is cancelled. defaults to30000
- Install puppeteer >= 1.0.0 with
npm install puppeteer --save
in your project and pass it tochrome-page-eval
constructor function.
- What you return in your script function (
scriptFn
option) must be a serializable value in order to receive it properly, if a non serializable value is returned you will getundefined
as the result.
-
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 useset 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 useset CHROME_PAGE_EVAL_DEBUGGING=true && node [your-entry-file-here].js
).
See license