Puppeteer (Chrome headless node API) based web page renderer.
Useful server side rendering through proxy. Outputs HTML, PDF and screenshots as PNG.
You can run Chromium or docker.
npm install
npm start
(service port: 3000)
docker run -d --name renderer -p 8080:3000 zenato/puppeteer-renderer
Input url http://localhost:{port}/?url=https://www.google.com
If you can see html code, server works fine.
If you have active service, set proxy configuration with middleware. See puppeteer-renderer-middleware for express.
const renderer = require('puppeteer-renderer-middleware');
const app = express();
app.use(renderer({
url: 'http://installed-your-puppeteer-renderer-url',
// userAgentPattern: /My-Custom-Agent/i,
// excludeUrlPattern: /*.html$/i
// timeout: 30 * 1000,
}));
// your service logics..
app.listen(8080);
Name | Required | Value | Description | Usage |
---|---|---|---|---|
url |
yes | Target URL | http://puppeteer-renderer?url=http://www.google.com |
|
type |
pdf or screenshot |
Rendering another type. | http://puppeteer-renderer?url=http://www.google.com&type=pdf |
|
(Extra options) | Extra options (see puppeteer API doc) | http://puppeteer-renderer?url=http://www.google.com&type=pdf&scale=2 |
You can add a PUPPETEER_RENDERER_KEY
environment variable and the service will require an Authentication: {key}
header set to the same string as
the environment variable to work.
Generated PDFs are returned with a Content-disposition
header requesting the browser to download the file instead of showing it.
The file name is generated from the URL rendered:
URL | Filename |
---|---|
https://www.example.com/ |
www.example.com.pdf |
https://www.example.com:80/ |
www.example.com.pdf |
https://www.example.com/resource |
resource.pdf |
https://www.example.com/resource.extension |
resource.pdf |
https://www.example.com/path/ |
path.pdf |
https://www.example.com/path/to/ |
pathto.pdf |
https://www.example.com/path/to/resource |
resource.pdf |
https://www.example.com/path/to/resource.ext |
resource.pdf |