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 gefragt FAQ-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.

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.