Integration

Shifter verwenden mit Playwright

Führen Sie Chromium, Firefox und WebKit über Shifters Residential- und ISP-Proxys — Anmeldedaten inline, keine Sidecar-Erweiterung erforderlich. Erstklassige Proxy-Unterstützung für Node, Python, Java und .NET.

Schnellstart

Installieren

npm install playwright

Grundlegende Nutzung

import { chromium } from "playwright";

const browser = await chromium.launch({
  proxy: {
    server: "http://p.shifter.io:443",
    username: "customer-USERNAME-country-us-sid-123ABC",
    password: "PASSWORD",
  },
});

const page = await browser.newPage();
await page.goto("https://ipinfo.io/json");
console.log(await page.textContent("body"));
// {"ip": "154.16.xxx.xxx", "city": "New York", "country": "US", ...}

await browser.close();

Funktionen

Native Proxy-Unterstützung mit inline eingebetteten Anmeldedaten — keine Sidecar-Erweiterung oder Browser-Anpassung erforderlich
Dieselbe Einrichtung funktioniert für Chromium, Firefox und WebKit auf jeder unterstützten Plattform
Kontextbezogene Proxy-Konfiguration ermöglicht das Mischen von Ländern innerhalb einer Browser-Instanz
Identische API für Node, Python, Java und .NET — dasselbe Proxy-Dict in jeder Sprache
Geo-Targeting in 195+ Ländern über Benutzernamensparameter -- country, region, city, ASN
Standardmäßig Rotation pro Anfrage, mit `sid` für Sticky Sessions und `ttl-N` für zeitgesteuerte Pins von N Sekunden

Beispiele

Kontextbezogenes Geo-Targeting (ein Browser, viele Regionen)

Jeder Browser-Kontext kann seinen eigenen Proxy haben. Starten Sie einen US-Kontext, einen UK-Kontext und einen JP-Kontext innerhalb einer Browser-Instanz — Playwrights herausragendes Merkmal für paralleles lokalisiertes Scraping.

import { chromium } from "playwright";

const browser = await chromium.launch();

async function makeContext(country: string, sid: string) {
  return browser.newContext({
    proxy: {
      server: "http://p.shifter.io:443",
      username: `customer-USERNAME-country-${country}-sid-${sid}`,
      password: "PASSWORD",
    },
    userAgent:
      "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
  });
}

const [us, uk, jp] = await Promise.all([
  makeContext("us", "us-001"),
  makeContext("uk", "uk-001"),
  makeContext("jp", "jp-001"),
]);

const [usPage, ukPage, jpPage] = await Promise.all([
  us.newPage(),
  uk.newPage(),
  jp.newPage(),
]);

await Promise.all([
  usPage.goto("https://www.example.com"),
  ukPage.goto("https://www.example.co.uk"),
  jpPage.goto("https://www.example.jp"),
]);

console.log({
  us: await usPage.title(),
  uk: await ukPage.title(),
  jp: await jpPage.title(),
});

await browser.close();

Multi-Browser (Chromium / Firefox / WebKit)

Dieselbe Proxy-Konfiguration für alle drei Engines. Nützlich für browserübergreifendes Scraping oder um die Engine auszuwählen, die bei einem bestimmten Ziel am wenigsten wahrscheinlich Bot-Erkennung auslöst.

import { chromium, firefox, webkit, type BrowserType } from "playwright";

const proxy = {
  server: "http://p.shifter.io:443",
  username: "customer-USERNAME-country-de-city-berlin-sid-456DEF",
  password: "PASSWORD",
};

async function visit(engine: BrowserType, label: string) {
  const browser = await engine.launch({ proxy });
  const page = await browser.newPage();
  await page.goto("https://example.de");
  const title = await page.title();
  await browser.close();
  return { label, title };
}

const results = await Promise.all([
  visit(chromium, "chromium"),
  visit(firefox, "firefox"),
  visit(webkit, "webkit"),
]);

console.log(results);

Playwright Test Suite

Konfigurieren Sie Shifter einmalig in playwright.config.ts, damit jeder Test über den Proxy geleitet wird. Verwenden Sie Umgebungsvariablen für die Anmeldedaten, damit diese nicht in die Versionsverwaltung gelangen.

// playwright.config.ts
import { defineConfig } from "@playwright/test";

export default defineConfig({
  testDir: "./tests",
  workers: 4,

  use: {
    proxy: {
      server: "http://p.shifter.io:443",
      username: process.env.SHIFTER_USER!, // e.g. customer-USERNAME-country-us-sid-test
      password: process.env.SHIFTER_PASS!,
    },
    userAgent:
      "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
    viewport: { width: 1920, height: 1080 },
    ignoreHTTPSErrors: false,
  },
});

// tests/products.spec.ts
import { test, expect } from "@playwright/test";

test("US homepage renders", async ({ page }) => {
  await page.goto("https://example.com");
  await expect(page.getByRole("heading", { level: 1 })).toBeVisible();
});

test("Product page parses", async ({ page }) => {
  await page.goto("https://example.com/products/123");
  const price = await page.locator(".price").textContent();
  expect(price).toMatch(/^\$\d+/);
});

Python: chromium.launch mit Sticky Session

Playwright ist sprachübergreifend identisch. Dieselbe wörterbuchförmige Proxy-Konfiguration in Python — und der Rest der API spiegelt die Node-Version wider.

# pip install playwright
# playwright install chromium

import asyncio
import secrets
from playwright.async_api import async_playwright

async def main():
    sid = secrets.token_hex(4)

    async with async_playwright() as p:
        browser = await p.chromium.launch(
            proxy={
                "server": "http://p.shifter.io:443",
                "username": f"customer-USERNAME-country-fr-city-paris-sid-{sid}-ttl-300",
                "password": "PASSWORD",
            }
        )

        context = await browser.new_context(
            user_agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36",
        )

        page = await context.new_page()

        # Multi-step flow — same residential IP across every navigation.
        await page.goto("https://example.fr/login", wait_until="networkidle")
        await page.fill("#email", "user@example.com")
        await page.fill("#password", "secret")
        await page.click("button[type=submit]")
        await page.wait_for_url("**/dashboard")

        rows = await page.locator(".order-row").all_text_contents()
        print(f"Found {len(rows)} orders")

        await browser.close()

asyncio.run(main())
FAQ

Häufig gestellte Fragen

Häufige Fragen zur Verwendung von Shifter mit Playwright.

Übergeben Sie ein `proxy`-Feld in den Browser-Startoptionen mit `server`, `username` und `password`. Dieselbe Struktur gilt für Chromium, Firefox und WebKit. Anmeldedaten werden inline übergeben — keine Erweiterung erforderlich, und es funktioniert im Headless-Modus sofort.

Ja. Übergeben Sie `proxy` an `browser.newContext()`, und dieser Kontext verwendet einen anderen Proxy als der Rest des Browsers. Dies ist der sauberste Weg, um mehrere Länder parallel innerhalb eines Prozesses zu scrapen — deutlich speichereffizienter als das Starten mehrerer Browser.

Ja. Dieselbe Proxy-Konfiguration funktioniert für alle drei Engines. Firefox und WebKit sind nützlich, wenn ein Ziel Chrome-spezifische Bot-Erkennung einsetzt — Playwright ist eines der wenigen Tools, bei dem der Wechsel der Engine eine einzeilige Änderung ist.

Fügen Sie dem Proxy-Benutzernamen eine Sitzungs-ID hinzu — zum Beispiel `customer-USERNAME-country-us-sid-123ABC`. Jede Navigation, Anfrage und jeder Tab innerhalb dieses Kontexts verwendet dieselbe Residential IP. Fügen Sie `ttl-N` hinzu, um sie für bis zu N Sekunden festzuhalten.

Ja. Setzen Sie das Feld `use.proxy` in `playwright.config.ts`. Jeder Test, der es nicht überschreibt, erbt den Shifter-Proxy. Verwenden Sie Umgebungsvariablen für die Anmeldedaten, damit diese nicht in die Versionsverwaltung gelangen.

Ja — Playwright hat offizielle Clients für Python, Java und .NET. Die Proxy-Konfiguration verwendet dieselbe Struktur (server, username, password) in jeder Sprache. Die Beispiele auf dieser Seite zeigen sowohl Node als auch Python, aber dieselbe Einrichtung funktioniert überall.

Jetzt starten

Shifter verwenden mit Playwright

Steuern Sie Chromium, Firefox und WebKit über Shifters 205M+ Residential- und ISP-Proxys - Anmeldedaten direkt im Code, keine Erweiterungen erforderlich. Funktioniert mit Node, Python, Java und .NET.

Shifter kostenlos testenIn Minuten eingerichtet. Jederzeit kuendbar.