Copper
Copper is a lightweight node.js library which allows creating Chrome or Chromium browser instances for controlling remotely either using Chrome DevTools Protocol or W3C WebDriver Protocol.
Use Cases
- Run tests on a remote chrome browser, using technologies you already use such as Puppeteer or WebdriverIO
- Run Selenium tests without Selenium - Copper simply replaces the Selenium server and compatible to most selenium clients
- Generate PDF or screenshots of a webpage
- Any other usage of a remote chromium instance you can think of: scraping, crawling, automating, and probably many more - just use Copper to create a remote Chromium and access it using one of the protocols it exposes: CDP and WebDriver
Getting started
Installation
npm i -g @copperjs/copper
yarn global add @copperjs/copper
Usage
copper standalone --port 9115
run a puppeteer tests using copper:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.connect({ browserWSEndpoint: 'ws://localhost:9115' });
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
})();
or run a selenium test using copper:
const webdriverio = require('webdriverio');
(async () => {
const browser = await webdriverio.remote({ path: '/wd/hub/', hostname: 'localhost', port: 9115 });
await browser.url('https://example.com');
await page.saveScreenshot('example.png');
await browser.deleteSession();
})();
Key Features
- Scale out multiple nodes of Copper using a Hub/Node architecture inspired by Selenium Grid (Hub/Node).
- Uses pure Node.js - no more complied binaries and jars that must match your browser version. Copper uses chrome-launcher meaning it will run on any machine with chrome/chromium on it.
- Lightweight and fast - see benchmarks
Our Name
As you can see - Copper is right in between Chromium and Selenium in the Periodic table. since what Copper does, is kinda between those two - this name was just there for us to use.
Roadmap