Puppetchef is a web automation tool that uses Puppeteer to execute web automation recipes defined in YAML format. You can find and fork the source code on GitHub for personal or collaborative use.
Installation#
You can find and install the package directly from the npm registry:
npm install puppetchef
Usage#
puppetchef <recipe> [options]
Command Line Options#
<recipe>: Recipe file in YAML format (required).-c, --conf <file>: Configuration file (default:puppetchefrc).--syntax-check: Validate recipe only, without executing (default:false).
Environment Variables#
PUPPETCHEF_LOGLEVEL: Enables debugging at the specified level (info, debug, error, warn, verbose).PUPPETCHEF_LOGFILE: Path to the log file (default: stdout) when a debug level is set.
Configuration File#
// puppetchefrc
{
"executablePath": "/usr/local/bin/chromium",
"headless": false,
"defaultViewport": {
"width": 1920,
"height": 1080
},
"downloadBehavior": {
"policy": "allow",
"downloadPath": "/tmp"
}
}
Examples#
Validate Recipes#
To validate a recipe without executing it, simply run:
puppetchef recipe.yaml --syntax-check
Execute Recipes#
To execute a recipe, simply run:
puppetchef recipe.yaml
For additional information or file output, configure the appropriate environment variables:
PUPPETCHEF_LOGLEVEL=DEBUG
PUPPETCHEF_LOGFILE=/tmp/puppetchef.log
puppetchef recipe.yaml
Create Recipes#
Template engine is based on Handlebarjs and support env and json as helper functions.
url: "https://example.com"
name: "Login Test"
tasks:
- name: "Login"
steps:
- puppetchef.builtin.common:
command: "fill_out"
selector: "#username"
data: "testuser"
- puppetchef.builtin.common:
command: "fill_out"
selector: "#password"
data: "{{{ env 'PASS' }}}"
- puppetchef.builtin.common:
command: "click"
selector: "#submit"
Create Your Own Plugin#
Write a plugins Module#
// plugin.js in plugins module
module.exports = {
customAction: async (page, data = {}) => {
// Custom automation logic
await page.locator(data.selector);
// If you need to return values for later use
return { x: 20, y: "msg" };
}
};
Install The Plugin In Your Project#
npm install plugins
Use The Plugin In Your Recipes#
name: Example Recipe
url: https://example.com/demo-url
tasks:
- name: "Custom Action"
steps:
- puppetchef.plugins.plugin:
command: "customAction"
selector: "#username"
# Make the return value of customAction available to the following steps
register: ret
- puppetchef.builtin.common:
command: debug
format: "Debugging: {{ ret.y }}"
# Conditionals for when to execute this step
when: "{{ ret.x }} > 0"