Puppeteer(Chrome headless node API) based web page renderer
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.
docker run -d --name renderer -p 8080:3000 ghcr.io/zenato/puppeteer-renderer:latest
pnpm install
pnpm dev
(service port: 3000)
docker build . --file ./Dockerfile --tag local/puppeteer-renderer --build-arg SCOPE=puppeteer-renderer
docker run -d --name renderer -p 8080:3000 local/puppeteer-renderer
### Test on your browser
Input url `http://localhost:{port}/{html|pdf|screenshot}?url=https://www.google.com`
If you can see html code, server works fine.
### Puppeteer customization
When starting `pnpm {dev|start}` or docker container you can customize puppeteer using environment variables.
- `IGNORE_HTTPS_ERRORS=true` - Ignores HTTPS errors
- `PUPPETEER_ARGS='--host-rules=MAP localhost yourproxy'` - Ads additional args that will be passed to puppeteer. Supports multiple arguments.
## Integration with existing service.
If you have active service, set proxy configuration with middleware.
See [puppeteer-renderer-middleware](packages/middleware/README.md) for express.
```ts
import express from 'express'
import renderer from 'puppeteer-renderer-middleware'
const app = express()
app.use('/render-proxy', 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);
Endpoint: /{html|pdf|screenshot}
Name | Required | Value | Description | Usage |
---|---|---|---|---|
url |
yes | Target URL | http://puppeteer-renderer/html?url=http://www.google.com |
|
animationTimeout |
Timeout in milliseconds | Waits for animations to finish before taking the screenshot. Only applicable to type screenshot |
http://puppeteer-renderer/screenshot?url=http://www.google.com&animationTimeout=3000 |
|
(Extra options) | Extra options (see puppeteer API doc) | http://puppeteer-renderer/pdf?url=http://www.google.com&scale=2 |
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 |
Copyright (c) 2017-present, Yeongjin Lee