Connects to user's running Brave via Chrome DevTools Protocol to automate ChatGPT interaction. Uses puppeteer-core to open a tab, send the prompt, wait for response, and extract the result. No cookies, no separate profiles, no copy/paste. Just connects to the browser where the user is already logged in. One-time setup: relaunch Brave with --remote-debugging-port=9222 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
161 lines
5.1 KiB
Markdown
161 lines
5.1 KiB
Markdown
# @puppeteer/browsers
|
|
|
|
Manage and launch browsers/drivers from a CLI or programmatically.
|
|
|
|
## System requirements
|
|
|
|
- A compatible Node version (see `engines` in `package.json`).
|
|
- For Firefox downloads:
|
|
- Linux builds: `xz` and `bzip2` utilities are required to unpack `.tar.gz` and `.tar.bz2` archives.
|
|
- MacOS builds: `hdiutil` is required to unpack `.dmg` archives.
|
|
|
|
## CLI
|
|
|
|
Use `npx` to run the CLI:
|
|
|
|
```bash
|
|
# This will install and run the @puppeteer/browsers package.
|
|
# If it is already installed in the current directory, the installed
|
|
# version will be used.
|
|
npx @puppeteer/browsers --help
|
|
```
|
|
|
|
Built-in per-command `help` will provide all documentation you need to use the CLI.
|
|
|
|
```bash
|
|
npx @puppeteer/browsers --help # help for all commands
|
|
npx @puppeteer/browsers install --help # help for the install command
|
|
npx @puppeteer/browsers launch --help # help for the launch command
|
|
npx @puppeteer/browsers clear --help # help for the clear command
|
|
npx @puppeteer/browsers list --help # help for the list command
|
|
```
|
|
|
|
You can specify the version of the `@puppeteer/browsers` when using
|
|
`npx`:
|
|
|
|
```bash
|
|
# Always install and use the latest version from the registry.
|
|
npx @puppeteer/browsers@latest --help
|
|
# Always use a specifc version.
|
|
npx @puppeteer/browsers@2.4.1 --help
|
|
# Always install the latest version and automatically confirm the installation.
|
|
npx --yes @puppeteer/browsers@latest --help
|
|
```
|
|
|
|
To clear all installed browsers, use the `clear` command:
|
|
|
|
```bash
|
|
npx @puppeteer/browsers clear
|
|
```
|
|
|
|
To list all installed browsers, use the `list` command:
|
|
|
|
```bash
|
|
npx @puppeteer/browsers list
|
|
```
|
|
|
|
Some example to give an idea of what the CLI looks like (use the `--help` command for more examples):
|
|
|
|
```sh
|
|
# Download the latest available Chrome for Testing binary corresponding to the Stable channel.
|
|
npx @puppeteer/browsers install chrome@stable
|
|
|
|
# Download a specific Chrome for Testing version.
|
|
npx @puppeteer/browsers install chrome@116.0.5793.0
|
|
|
|
# Download the latest Chrome for Testing version for the given milestone.
|
|
npx @puppeteer/browsers install chrome@117
|
|
|
|
# Download the latest available ChromeDriver version corresponding to the Canary channel.
|
|
npx @puppeteer/browsers install chromedriver@canary
|
|
|
|
# Download a specific ChromeDriver version.
|
|
npx @puppeteer/browsers install chromedriver@116.0.5793.0
|
|
|
|
# On Ubuntu/Debian and only for Chrome, install the browser and required system dependencies.
|
|
# If the browser version has already been installed, the command
|
|
# will still attempt to install system dependencies.
|
|
# Requires root privileges.
|
|
npx puppeteer browsers install chrome --install-deps
|
|
```
|
|
|
|
## Known limitations
|
|
|
|
1. Launching the system browsers is only possible for Chrome/Chromium.
|
|
|
|
## Custom Providers
|
|
|
|
You can implement custom browser providers to download from alternative sources like corporate mirrors, private repositories, or specialized browser builds.
|
|
|
|
```typescript
|
|
import {
|
|
BrowserProvider,
|
|
DownloadOptions,
|
|
Browser,
|
|
BrowserPlatform,
|
|
} from '@puppeteer/browsers';
|
|
|
|
class SimpleMirrorProvider implements BrowserProvider {
|
|
constructor(private mirrorUrl: string) {}
|
|
|
|
supports(options: DownloadOptions): boolean {
|
|
return options.browser === Browser.CHROME;
|
|
}
|
|
|
|
getDownloadUrl(options: DownloadOptions): URL | null {
|
|
const {buildId, platform} = options;
|
|
const filenameMap = {
|
|
[BrowserPlatform.LINUX]: 'chrome-linux64.zip',
|
|
[BrowserPlatform.MAC]: 'chrome-mac-x64.zip',
|
|
[BrowserPlatform.MAC_ARM]: 'chrome-mac-arm64.zip',
|
|
[BrowserPlatform.WIN32]: 'chrome-win32.zip',
|
|
[BrowserPlatform.WIN64]: 'chrome-win64.zip',
|
|
};
|
|
const filename = filenameMap[platform];
|
|
if (!filename) return null;
|
|
return new URL(`${this.mirrorUrl}/chrome/${buildId}/${filename}`);
|
|
}
|
|
|
|
getExecutablePath(options: DownloadOptions): string {
|
|
const {platform} = options;
|
|
if (
|
|
platform === BrowserPlatform.MAC ||
|
|
platform === BrowserPlatform.MAC_ARM
|
|
) {
|
|
return 'chrome-mac/Chromium.app/Contents/MacOS/Chromium';
|
|
} else if (platform === BrowserPlatform.LINUX) {
|
|
return 'chrome-linux64/chrome';
|
|
} else if (platform.includes('win')) {
|
|
return 'chrome-win64/chrome.exe';
|
|
}
|
|
throw new Error(`Unsupported platform: ${platform}`);
|
|
}
|
|
}
|
|
```
|
|
|
|
Use with the `install` API:
|
|
|
|
```typescript
|
|
import {install} from '@puppeteer/browsers';
|
|
|
|
const customProvider = new SimpleMirrorProvider('https://internal.company.com');
|
|
|
|
await install({
|
|
browser: Browser.CHROME,
|
|
buildId: '120.0.6099.109',
|
|
platform: BrowserPlatform.LINUX,
|
|
cacheDir: '/tmp/puppeteer-cache',
|
|
providers: [customProvider],
|
|
});
|
|
```
|
|
|
|
Multiple providers can be chained - they're tried in order until one succeeds, with a default provider such as Chrome for Testing, as an automatic fallback.
|
|
|
|
:::caution
|
|
Custom providers are NOT officially supported by Puppeteer. You accept full responsibility for binary compatibility, testing, and maintenance.
|
|
:::
|
|
|
|
## API
|
|
|
|
The programmatic API allows installing and launching browsers from your code. See the `test` folder for examples on how to use the `install`, `canInstall`, `launch`, `computeExecutablePath`, `computeSystemExecutablePath` and other methods.
|