# Puppeteer

# How to use in Puppeteer

- Run Nstbrowser client or Docker, the client server will listen on port: `8848`
- Run JavaScript demo below

## Common code
**You need to install puppeteer first: `npm install puppeteer`**

```javascript
async function execPuppeteer(browserWSEndpoint) {
  try {
    const browser = await puppeteer.connect({
      browserWSEndpoint: browserWSEndpoint,
      defaultViewport: null,
    });

    const page = await browser.newPage();
    await page.goto('https://nstbrowser.io/');
    await page.screenshot({path: 'screenshot.png'});
    await browser.disconnect();
  } catch (err) {
    console.error(err);
  }
}
```

## ConnectBrowser

Automation with [ConnectBrowser API](/api-15554920)

```javascript
import puppeteer from 'puppeteer';

// ConnectBrowser: Launch and connect to a running browser or a created profile
async function launchAndConnectToBrowser(profileId) {
  const host = 'localhost:8848';
  const apiKey = 'your api key';
  const config = {
    headless: false, // support: true or false
    autoClose: true,
  };
  const query = new URLSearchParams({
    'x-api-key': apiKey, // required
    config: encodeURIComponent(JSON.stringify((config))),
  });
  const browserWSEndpoint = `ws://${host}/api/v2/connect/${profileId}?${query.toString()}`;
  console.log('browserWSEndpoint: ', browserWSEndpoint);
  await execPuppeteer(browserWSEndpoint);
}

launchAndConnectToBrowser('your profileId').then();
```

## ConnectOnceBrowser

Automation with [ConnectOnceBrowser API](/api-15554921)

```javascript
import puppeteer from 'puppeteer';


// ConnectOnceBrowser: Launch or connect to a once browser
async function createAndConnectToBrowser() {
  const host = 'localhost:8848';
  const apiKey = 'your api key';
  const config = {
    name: 'testProfile',
    platform: 'windows', // support: windows, macos, linux
    kernelMilestone: '132',
    headless: false, // support: true or false
    autoClose: false,
    remoteDebuggingPort: 9223,
    proxy: '', // input format: schema://user:password@host:port eg: http://user:password@localhost:8080
    args: {
      "--proxy-bypass-list": "detect.nstbrowser.io"
    }, // browser args
    fingerprint: {
      hardwareConcurrency: 16,
      deviceMemory: 8,
      userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.56 Safari/537.36', // userAgent supportted since v0.15.0
    },
  };
  const query = new URLSearchParams({
    'x-api-key': apiKey, // required
    config: encodeURIComponent(JSON.stringify((config))),
  });
  const browserWSEndpoint = `ws://${host}/api/v2/connect?${query.toString()}`;
  console.log('browserWSEndpoint: ', browserWSEndpoint);
  await execPuppeteer(browserWSEndpoint);
}

createAndConnectToBrowser().then();
```

