Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zenato/puppeteer-renderer
Puppeteer(Chrome headless node API) based web page renderer
https://github.com/zenato/puppeteer-renderer
chrome-headless puppeteer server-side-rendering
Last synced: about 2 months ago
JSON representation
Puppeteer(Chrome headless node API) based web page renderer
- Host: GitHub
- URL: https://github.com/zenato/puppeteer-renderer
- Owner: zenato
- License: mit
- Created: 2017-08-17T12:36:46.000Z (over 7 years ago)
- Default Branch: main
- Last Pushed: 2024-08-31T03:13:26.000Z (3 months ago)
- Last Synced: 2024-08-31T17:38:34.310Z (3 months ago)
- Topics: chrome-headless, puppeteer, server-side-rendering
- Language: TypeScript
- Homepage:
- Size: 771 KB
- Stars: 310
- Watchers: 6
- Forks: 95
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-puppeteer - puppeteer-renderer
- awesome-puppeteer - puppeteer-renderer - Generic web page renderer. (Rendering and web scraping)
- awesome-puppeteer-zh - puppeteer-renderer - 通用网页渲染器. (渲染和网页抓取 / 贡献)
README
# Puppeteer(Chrome headless node API) based web page renderer
[Puppeteer](https://github.com/GoogleChrome/puppeteer) (Chrome headless node API) based web page renderer.
Useful server side rendering through proxy. Outputs HTML, PDF and screenshots as PNG.
## Requirements
You can run Chromium or docker.## Getting Started
### Start server using docker (If you can not run Chromium and installed docker)
```bash
docker run -d --name renderer -p 8080:3000 ghcr.io/zenato/puppeteer-renderer:latest
```### Local (git clone)
`pnpm install`
#### Start server (If you can run Chromium)
`pnpm dev`
(service port: 3000)#### Locally build the image
```bash
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);
```## API
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](https://github.com/GoogleChrome/puppeteer/blob/v1.1.0/docs/api.md#pagepdfoptions)) | `http://puppeteer-renderer/pdf?url=http://www.google.com&scale=2` |## PDF File Name Convention
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` |## License
[MIT](http://opensource.org/licenses/MIT)
Copyright (c) 2017-present, Yeongjin Lee