puppeteer-extension
v0.3.0
Published
Automate your browser without allowing websites to detect automated control.
Downloads
14
Maintainers
Readme
Puppeteer Extension
Puppeteer Extension is software used for browser automation. Its main goal is to support the API of puppeteer, while 3rd party websites cannot detect browser automation ( especially with Chromium). It works by using the default browser with GUI (that normal users use), which has the browser extension of this repository installed, that communicates to the controller - a NodeJS/express app.
Since the browser will be run without telling it, that it will be automated, a real headless mode isn't supported. I personally use it with Xvfb and Chromium on a RaspberryPI.
Installation
Browser Extension
Note: Since there is no UI yet, you first might want to configure the URL of the middleware in extension/background.ts to connect to the NodeJS app.
- Compile the extension:
npm run build:extension - Open chrome://extensions/.
- Enable developer mode.
- Click "Load unpacked" (recommended for Chrome) or "Pack extension" (recommended for Chromium).
- Choose the
dist/extensiondirectory that was created in step 1 as extension root. - If extension was packed in step 4: Drag and Drop the created
.crxfile into Chromium.
NodeJS
npm install puppeteer-extension
Usage
Create the browser connector and add the middleware to an express server. Not perfect at all, but a quick solution.
import puppeteer from 'puppeteer-extension';
import * as express from 'express';
// server for communication between browser extension and NodeJS
const app = express();
app.use(express.json());
const server = app.listen(8088);
puppeteer.launch({
executablePath: '/path/to/chrome-or-chromium'
}).then(async browser => {
// Register communication endpoint
app.use('/api/bridge/puppeteer', browser.middleware());
// do something with puppeteer
const page = await browser.newPage();
await page.goto('https://example.com');
const content = await page.evaluate('document.documentElement.innerHTML');
if(content.includes('<a')) {
await page.click('a');
}
// shut everything down
await page.close();
browser.close();
server.close();
});