Skip to content

Instantly share code, notes, and snippets.

@jancurn
Last active February 29, 2024 07:26
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save jancurn/05ed1ce414ca1f8f5a2e5f1eb4b1a2c6 to your computer and use it in GitHub Desktop.
Save jancurn/05ed1ce414ca1f8f5a2e5f1eb4b1a2c6 to your computer and use it in GitHub Desktop.
Example showing how to use the proxy-chain NPM package to let headless Chrome use a proxy server with username and password
const puppeteer = require('puppeteer');
const proxyChain = require('proxy-chain');
(async() => {
const oldProxyUrl = 'http://bob:password123@proxy.example.com:8000';
const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);
// Prints something like "http://127.0.0.1:45678"
console.log(newProxyUrl);
const browser = await puppeteer.launch({
args: [`--proxy-server=${newProxyUrl}`],
});
// Do your magic here...
const page = await browser.newPage();
await page.goto('https://www.example.com');
await page.screenshot({ path: 'example.png' });
await browser.close();
// Clean up, forcibly close all pending connections
await proxyChain.closeAnonymizedProxy(newProxyUrl, true);
})();
@jancurn
Copy link
Author

jancurn commented Apr 15, 2020

@gsouf Unfortunately not, you need to call closeAnonymizedProxy. I'll update the Gist

@aditodkar
Copy link

aditodkar commented Jan 9, 2023

@jancurn I am trying to run puppeteer with proxy chain package on aws lambda but I am getting this error message:

"errorType": "Error",
  "errorMessage": "Protocol error (Target.createTarget): Target closed.",

code:

const chromium = require('chrome-aws-lambda');
const { addExtra } = require("puppeteer-extra");
const puppeteerExtra = addExtra(chromium.puppeteer);
const proxyChain = require('proxy-chain');

const StealthPlugin = require("puppeteer-extra-plugin-stealth");
puppeteerExtra.use(StealthPlugin());

exports.handler = async (event, context, callback) => {
    let finalResult = [];
    const url = ``;
    let browser;
    const oldProxyUrl = ''; // --> bright data proxy
    const newProxyUrl = await proxyChain.anonymizeProxy(oldProxyUrl);

    console.log("newProxyUrl", newProxyUrl)

    try {
        browser = await puppeteerExtra.launch({
            args: ['--no-sandbox', '--disable-setuid-sandbox', `--proxy-server=${newProxyUrl}`],
            defaultViewport: chromium.defaultViewport,
            executablePath: await chromium.executablePath,
            headless: chromium.headless
        });

        const page = await browser.newPage();

        await page.goto(url);

        finalResult = await extractElements(page);

    } catch (error) {
        return callback(error);
    } finally {
        await browser.close();
    }

    return callback(null, finalResult);
};

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment