Integration

Shifter verwenden mit Puppeteer

Steuern Sie eine echte Chromium-Instanz in wenigen Minuten über Shifters Residential-Proxys. Native --proxy-server-Unterstützung, page.authenticate(), geo-spezifisches Targeting pro Tab und vollständige Cluster-Skalierung - keine zusätzlichen Plugins erforderlich.

Schnellstart

Installieren

npm install puppeteer

Grundlegende Nutzung

import puppeteer from "puppeteer";

const browser = await puppeteer.launch({
  args: ["--proxy-server=http://p.shifter.io:443"],
  headless: "new",
});

const page = await browser.newPage();
await page.authenticate({
  username: "customer-USERNAME-country-us-sid-123ABC",
  password: "PASSWORD",
});

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

await browser.close();

Funktionen

Nativer --proxy-server-Support – keine zusätzlichen Erweiterungen oder Sidecar-Prozesse erforderlich
page.authenticate() verarbeitet Shifter-Anmeldedaten automatisch, auch im headless: 'new'-Modus
Tab-spezifische Proxy-Anmeldedaten ermöglichen das parallele Scrapen mehrerer Länder aus einem einzigen Browser
Geo-Targeting in 195+ Ländern über Benutzernamensparameter -- country, region, city, ASN
Kompatibel mit puppeteer-cluster, puppeteer-extra-plugin-stealth und dem gesamten Puppeteer-Plugin-Ökosystem
Standardmäßig Rotation pro Anfrage, mit `sid` für Sticky Sessions und `ttl-N` für zeitgesteuerte Pins von N Sekunden

Beispiele

Authentifizierter Proxy + Sticky Session

Fixieren Sie eine Residential IP für die gesamte Browser-Sitzung, indem Sie `sid-XXX` zum Benutzernamen hinzufügen. Fügen Sie `country-uk-city-london` für Geo-Targeting und `ttl-300` hinzu, um diese IP für 300 Sekunden beizubehalten.

import puppeteer from "puppeteer";
import { randomBytes } from "node:crypto";

const sid = randomBytes(4).toString("hex");

const browser = await puppeteer.launch({
  args: [
    "--proxy-server=http://p.shifter.io:443",
    "--no-sandbox",
    "--disable-blink-features=AutomationControlled",
  ],
  headless: "new",
});

const page = await browser.newPage();
await page.authenticate({
  username: `customer-USERNAME-country-uk-city-london-sid-${sid}-ttl-300`,
  password: "PASSWORD",
});

await page.setUserAgent(
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36",
);

// Multi-step flow — every page load reuses the same residential IP.
await page.goto("https://example.co.uk/login", { waitUntil: "networkidle0" });
await page.type("#email", "user@example.com");
await page.type("#password", "secret");
await page.click('button[type="submit"]');
await page.waitForNavigation({ waitUntil: "networkidle0" });

await page.goto("https://example.co.uk/dashboard");
const html = await page.content();
console.log(html.length, "bytes from dashboard");

await browser.close();

Geo-Targeting pro Tab

Jede neue Seite erhält eigene Proxy-Zugangsdaten - lassen Sie einen Tab eine US-Website scrapen, während ein anderer eine japanische scrapt, alles über einen Browser.

import puppeteer from "puppeteer";

const browser = await puppeteer.launch({
  args: ["--proxy-server=http://p.shifter.io:443"],
  headless: "new",
});

async function scrape(country: string, url: string) {
  const page = await browser.newPage();
  await page.authenticate({
    username: `customer-USERNAME-country-${country}-sid-${country}-001`,
    password: "PASSWORD",
  });

  await page.goto(url, { waitUntil: "domcontentloaded" });
  const data = await page.evaluate(() => ({
    title: document.title,
    text: document.body.innerText.slice(0, 200),
  }));

  await page.close();
  return { country, ...data };
}

const results = await Promise.all([
  scrape("us", "https://www.example.com"),
  scrape("jp", "https://www.example.jp"),
  scrape("de", "https://www.example.de"),
  scrape("br", "https://www.example.com.br"),
]);

console.log(results);

await browser.close();

Puppeteer Cluster (paralleles Scraping)

Skalieren Sie auf Dutzende von Seiten parallel, ohne den Speicher zu überlasten. Übergeben Sie den Proxy über puppeteerOptions und authentifizieren Sie sich pro Seite in Ihrer Task-Funktion.

import { Cluster } from "puppeteer-cluster";

const cluster = await Cluster.launch({
  concurrency: Cluster.CONCURRENCY_PAGE,
  maxConcurrency: 10,
  puppeteerOptions: {
    args: ["--proxy-server=http://p.shifter.io:443"],
    headless: "new",
  },
  monitor: true,
});

await cluster.task(async ({ page, data: url }) => {
  await page.authenticate({
    username: `customer-USERNAME-country-us-sid-${url.replace(/\W+/g, "").slice(0, 8)}`,
    password: "PASSWORD",
  });

  await page.goto(url, { waitUntil: "networkidle0" });
  const title = await page.title();
  const html  = await page.content();

  return { url, title, length: html.length };
});

const urls = [
  "https://example.com/category/laptops",
  "https://example.com/category/phones",
  "https://example.com/category/tablets",
  // ... hundreds more
];

const results = await Promise.all(urls.map((url) => cluster.execute(url)));
console.log(results);

await cluster.idle();
await cluster.close();

Stealth-Modus + Ressourcen-Blockierung

Kombinieren Sie Shifter mit dem Stealth-Plugin von puppeteer-extra und blockieren Sie Bilder, Schriftarten und Medien, um 5–10x schneller zu scrapen und dabei Chromes Automatisierungserkennung zu umgehen.

import puppeteer from "puppeteer-extra";
import StealthPlugin from "puppeteer-extra-plugin-stealth";

puppeteer.use(StealthPlugin());

const browser = await puppeteer.launch({
  args: [
    "--proxy-server=http://p.shifter.io:443",
    "--disable-blink-features=AutomationControlled",
  ],
  headless: "new",
});

const page = await browser.newPage();

await page.authenticate({
  username: "customer-USERNAME-country-us-city-newyork-sid-789GHI",
  password: "PASSWORD",
});

// Block images, fonts, and media for faster page loads
await page.setRequestInterception(true);
page.on("request", (req) => {
  const blocked = ["image", "font", "media", "stylesheet"];
  blocked.includes(req.resourceType()) ? req.abort() : req.continue();
});

await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
const products = await page.$$eval(".product", (els) =>
  els.map((el) => ({
    title: el.querySelector("h2")?.textContent?.trim(),
    price: el.querySelector(".price")?.textContent?.trim(),
  })),
);

console.log(products);

await browser.close();
FAQ

Häufig gestellte Fragen

Häufige Fragen zur Verwendung von Shifter mit Puppeteer.

Pass --proxy-server=http://p.shifter.io:443 to the browser launch args, then call page.authenticate({ username, password }) on each page before navigating. The same proxy applies to every tab and the credentials handle the basic-auth challenge transparently.

Ja, in modernem Puppeteer (mit headless: 'new'). Der ältere `headless: true`-Modus unterstützt es ebenfalls. Wenn Sie bei Chromium-Versionen älter als 105 feststecken, müssen Sie möglicherweise auf eine Chrome-Erweiterung zurückgreifen, die Anmeldedaten einfügt, aber in jeder aktuellen Puppeteer-Version funktioniert page.authenticate einfach.

Fügen Sie dem Proxy-Benutzernamen eine Sitzungs-ID hinzu - zum Beispiel `customer-USERNAME-country-us-sid-123ABC`. Jede Seite, die sich mit diesem Benutzernamen authentifiziert, teilt dieselbe Residential IP. Fügen Sie `ttl-N` hinzu, um die IP für bis zu N Sekunden zu fixieren.

Ja. Jeder newPage()-Aufruf kann sich mit einem anderen Shifter-Benutzernamen authentifizieren -- `country-us` für ein Tab, `country-jp` für ein anderes. Der Status auf Browser-Ebene (Cookies, Cache) wird geteilt, aber die ausgehende IP ändert sich pro Tab, was ideal für das parallele Scraping lokalisierter Inhalte ist.

Ja. Das Stealth-Plugin patcht die Automatisierungs-Fingerprints von Chrome; Shifter übernimmt die Residential IP. Beides lässt sich sauber kombinieren -- installieren Sie puppeteer-extra und das Stealth-Plugin und konfigurieren Sie den Proxy beim Start wie gewohnt.

Übergeben Sie das Argument --proxy-server in puppeteerOptions beim Aufruf von Cluster.launch und rufen Sie dann page.authenticate im Callback Ihrer cluster.task auf. Kombinieren Sie dies mit einer eindeutigen sid pro Task für paralleles Scraping, das keine IPs zwischen Workern teilt.

Jetzt starten

Shifter verwenden mit Puppeteer

Steuern Sie headless Chromium über Shifters 205M+ Residential- und ISP-Proxys. Nativer --proxy-server, Geo-Targeting pro Tab, Sticky Sessions und vollständige Puppeteer-cluster-Unterstützung.

Shifter kostenlos testenIn Minuten eingerichtet. Jederzeit kuendbar.