Puppeteer & Playwright
DocsPuppeteer & Playwright

Puppeteer & Playwright

Uruchamiaj bezgłowe przeglądarki przez RaxyProxy z Puppeteer lub Playwright.

Puppeteer

npm install puppeteer

puppeteer.mjs
import puppeteer from 'puppeteer';

const browser = await puppeteer.launch({
    args: [
        '--proxy-server=http://proxy.raxyproxy.com:823',
        '--no-sandbox',
    ],
});

const page = await browser.newPage();

// Authenticate with the proxy
await page.authenticate({ username: 'USERNAME', password: 'PASSWORD' });

await page.goto('https://httpbin.org/ip');
const body = await page.evaluate(() => document.body.innerText);
console.log(JSON.parse(body));

await browser.close();

Geo-targeting z Puppeteer

puppeteer-geo.mjs
import puppeteer from 'puppeteer';

// Country targeting — append to username
const USERNAME_GEO = 'USERNAME__cr.us';

const browser = await puppeteer.launch({
    args: ['--proxy-server=http://proxy.raxyproxy.com:823', '--no-sandbox'],
});

const page = await browser.newPage();
await page.authenticate({ username: USERNAME_GEO, password: 'PASSWORD' });

await page.goto('https://httpbin.org/ip');
console.log(await page.evaluate(() => document.body.innerText));

await browser.close();

Playwright

npm install playwright

playwright.mjs
import { chromium } from 'playwright';

const browser = await chromium.launch({
    proxy: {
        server:   'http://proxy.raxyproxy.com:823',
        username: 'USERNAME',
        password: 'PASSWORD',
    },
});

const page = await browser.newPage();
await page.goto('https://httpbin.org/ip');

const text = await page.textContent('body');
console.log(JSON.parse(text));

await browser.close();

Geo-targeting z Playwright

playwright-geo.mjs
import { chromium } from 'playwright';

// City-level targeting (uses 2× billing for residential/mobile/datacenter)
const browser = await chromium.launch({
    proxy: {
        server:   'http://proxy.raxyproxy.com:823',
        username: 'USERNAME__cr.us;city.newyork',
        password: 'PASSWORD',
    },
});

const context = await browser.newContext();
const page    = await context.newPage();

await page.goto('https://httpbin.org/ip');
console.log(await page.textContent('body'));

await browser.close();
playwright-multiple-contexts.mjs
import { chromium } from 'playwright';

// Multiple browser contexts, each with a different sticky port
const browser = await chromium.launch();

const contexts = await Promise.all(
    [10001, 10002, 10003].map(port =>
        browser.newContext({
            proxy: {
                server:   `http://proxy.raxyproxy.com:${port}`,
                username: 'USERNAME',
                password: 'PASSWORD',
            },
        })
    )
);

const results = await Promise.all(
    contexts.map(async (ctx, i) => {
        const page = await ctx.newPage();
        await page.goto('https://httpbin.org/ip');
        const text = await page.textContent('body');
        await ctx.close();
        return { slot: i + 1, ip: JSON.parse(text).origin };
    })
);

console.log(results);
await browser.close();

Uwagi o odciskach palców przeglądarki

Sam proxy to za mało

Strony z zaawansowanym wykrywaniem botów sprawdzają odciski palców przeglądarki poza adresem IP: strefa czasowa, WebGL, Canvas, czcionki i właściwości navigator. Używanie proxy residential poprawia reputację IP, ale może być konieczne ustawienie strefy czasowej i języka przeglądarki, aby pasowały do docelowego kraju.

playwright-locale.mjs
import { chromium } from 'playwright';

const browser = await chromium.launch({
    proxy: {
        server:   'http://proxy.raxyproxy.com:823',
        username: 'USERNAME__cr.us',
        password: 'PASSWORD',
    },
});

// Match locale, timezone, and viewport to look like a real US user
const context = await browser.newContext({
    locale:    'en-US',
    timezoneId: 'America/New_York',
    viewport:  { width: 1280, height: 800 },
});

const page = await context.newPage();
await page.goto('https://httpbin.org/ip');
console.log(await page.textContent('body'));

await browser.close();