chrome-page-eval
chrome-page-eval copied to clipboard
Evaluate a script function on a page with Chrome 🔮
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) and get the return value of the evaluation in node.
Usage
<!-- 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)
}
})()
Constructor options
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
Evaluate options
const puppeteer = require('puppeteer')
const chromePageEval = require('chrome-page-eval')
const chromeEval = chromePageEval({ puppeteer })
(async () => {
const result = await chromeEval({ /*[evaluate options here]*/ })
})()
htmlstring [required] - the path to the html file to load in a Chrome pagescriptFnstring [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}'viewportobject - object with any of the viewport options supported by puppeteerargsarray - a list of custom arguments to pass to thescriptFnfunction. ex:args: [1, 2]and withscriptFn: function (a, b) { return a + b}'will produce3as resultstylesarray- array of css strings to insert at the beginning of page's head element. ex: styles: ['* { font-family: 'Calibri'; font-size: 16px; }']waitForJSboolean - whentruethescriptFnwon't be executed until the variable specified inwaitForJSVarNameoption is set to true in page's javscript. defaults tofalsewaitForJSVarNamestring - name of the variable that will be used as trigger ofscriptFn. defaults to"CHROME_PAGE_EVAL_READY"waitUntilstring - a value that specifies when a page is considered to be loaded, for the list of all possible values and its meanings seewaitUntiloption in puppeteer docs. defaults to the the default value of puppeteertimeoutnumber - time in ms to wait for the script evaluation to complete, when the timeout is reached the evaluation is cancelled. defaults to30000
Requirements
- Install puppeteer >= 1.0.0 with
npm install puppeteer --savein your project and pass it tochrome-page-evalconstructor function.
Caveats
- What you return in your script function (
scriptFnoption) must be a serializable value in order to receive it properly, if a non serializable value is returned you will getundefinedas 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 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_DEBUGGINGenv 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).
License
See license
