Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ebidel/try-puppeteer
Run Puppeteer code in the cloud
https://github.com/ebidel/try-puppeteer
appengine docker headless-chrome node puppeteer
Last synced: about 1 month ago
JSON representation
Run Puppeteer code in the cloud
- Host: GitHub
- URL: https://github.com/ebidel/try-puppeteer
- Owner: ebidel
- License: apache-2.0
- Created: 2017-09-07T21:42:34.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-02-28T17:40:00.000Z (9 months ago)
- Last Synced: 2024-09-30T15:31:07.232Z (about 1 month ago)
- Topics: appengine, docker, headless-chrome, node, puppeteer
- Language: JavaScript
- Homepage:
- Size: 143 KB
- Stars: 731
- Watchers: 18
- Forks: 117
- Open Issues: 26
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Try Puppeteer!
> Run [Puppeteer](https://github.com/GoogleChrome/puppeteer) scripts in the cloud.
## Develop
Installation:
```sh
yarn; yarn install-backend
# or npm i
```### Backend
The backend is a Docker container which installs the latest Chrome package
that works with Puppeteer on Linux.> **Note**: You'll need to have Docker running before attempting each step in this section.
#### Building it
```sh
yarn build
```#### Running the container
The container can be run in two modes: standalone as an executable, or as a web service.
**1. Using the standalone CLI**
The first is a "standalone" mode that runs a Puppeteer script from the CLI. It takes a script file as an argument and runs it in the container.
```
./backend/run_puppeteer.sh your-puppeteer-script.js
```**2. Running the web service**
The second option is running the container as a web server. The endpoint accepts
file uploads for running your Puppeteer scripts in the cloud:Start the server:
```sh
cd backend
yarn serve
# yarn restart is handy too. It rebuilds the container and starts the server.
```**Example** - running a Puppeteer script
```js
async function runCode(code) {
const form = new FormData();
form.append('file', new Blob([code], {type: 'text/javascript'}));
const resp = await fetch('http://localhost:8080/run', {method: 'POST', body: form});
return await resp.json();
}const code = `
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://example.com');
console.log(await page.content());
browser.close();
`;runCode(code).then(result => {
if (result.errors) {
console.error(result.errors);
}
console.log(result.log);
});
```**Notes**:
- There's no need to `require('puppeteer')`. This is done for you on the backend.
- Top-level async/await are supported.### Code editor frontend
Fire up the code editor UI from the main directory:
```
yarn serve
```Then navigate to `http://localhost:8081`.
## Deployment
1. Update the version of Puppeteer used in index.html, include the doc link. TODO: make this automatic.
2. `yarn deploy` deploys both the frontend and backend services to App Engine Flex. The
apps can also be deployed individually:```sh
yarn deploy-frontend
yarn deploy-backend
```## Notes & Limitations
- By default, Puppeteer launches and uses its own bundled version of Chromium. To use
the [`google-chrome-unstable`](https://www.ubuntuupdates.org/ppa/google_chrome) installed by the container, pass `executablePath`:```js
const browser = await puppeteer.launch({
executablePath: 'google-chrome-unstable'
});
```