Integration

Shifter verwenden mit Selenium

Integrieren Sie Shifters Residential- und ISP-Proxys in Selenium WebDriver für Python, Java, JavaScript, C# und Ruby. Funktioniert mit Chrome, Firefox und Edge — kombinieren Sie es mit selenium-wire für vollständige Benutzername-Passwort-Authentifizierung im Headless-Modus.

Schnellstart

Installieren

pip install selenium selenium-wire

Grundlegende Nutzung

# selenium-wire is a drop-in replacement for selenium that adds first-class
# support for authenticated proxies in headless mode.
from seleniumwire import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("--headless=new")

seleniumwire_options = {
    "proxy": {
        "http":  "customer-USERNAME-country-us-sid-123ABC:PASSWORD@p.shifter.io:443",
        "https": "customer-USERNAME-country-us-sid-123ABC:PASSWORD@p.shifter.io:443",
        "no_proxy": "localhost,127.0.0.1",
    }
}

driver = webdriver.Chrome(
    options=options,
    seleniumwire_options=seleniumwire_options,
)

driver.get("https://ipinfo.io/json")
print(driver.find_element("tag name", "body").text)
# {"ip": "154.16.xxx.xxx", "city": "New York", "country": "US", ...}

driver.quit()

Funktionen

Sofort einsatzbereite Unterstützung für Selenium-Clients in Python, Java, JavaScript, C# und Ruby
Authentifizierte Proxys im Headless-Modus über selenium-wire (Python) oder BrowserMob (Java)
Das Standard-Flag --proxy-server funktioniert mit Chrome, Edge und Firefox in Kombination mit IP-Whitelist-Authentifizierung
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
Kompatibel mit Selenium Grid, GitHub Actions-Runnern und jeder containerbasierten Scraping-Pipeline

Beispiele

Python + selenium-wire (Sticky Session)

selenium-wire leitet den Datenverkehr über einen prozessinternen MITM, wodurch Benutzername-Passwort-Proxys im Headless-Chrome problemlos funktionieren. Fügen Sie eine `sid` hinzu, um eine feste Residential IP für die gesamte Sitzung zu verwenden.

from seleniumwire import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import secrets

sid = secrets.token_hex(4)

options = Options()
options.add_argument("--headless=new")
options.add_argument(
    "--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
)

proxy_url = (
    f"customer-USERNAME-country-uk-city-london-sid-{sid}-ttl-300:"
    f"PASSWORD@p.shifter.io:443"
)

driver = webdriver.Chrome(
    options=options,
    seleniumwire_options={"proxy": {"http": proxy_url, "https": proxy_url}},
)

# Multi-step flow — same residential IP across every navigation.
driver.get("https://example.co.uk/login")
driver.find_element(By.ID, "email").send_keys("user@example.com")
driver.find_element(By.ID, "password").send_keys("secret")
driver.find_element(By.CSS_SELECTOR, "button[type=submit]").click()

WebDriverWait(driver, 10).until(EC.url_contains("/dashboard"))

rows = driver.find_elements(By.CSS_SELECTOR, ".order-row")
print(f"Found {len(rows)} orders on dashboard")

driver.quit()

Vanilla Selenium (ohne Extras) — IP-Whitelist

Wenn Sie selenium-wire nicht als Abhängigkeit möchten, verwenden Sie Shifters IP-Whitelist-Authentifizierung und konfigurieren Sie den Proxy über die Standard-ChromeOptions. Weniger Abhängigkeiten, aber Sie müssen Ihren Scraping-Host auf die Whitelist setzen.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("--headless=new")
options.add_argument("--proxy-server=http://p.shifter.io:443")
options.add_argument(
    "--user-agent=Mozilla/5.0 (Macintosh) AppleWebKit/537.36"
)

# When using IP-whitelist auth, your scrape host's outbound IP is
# pre-authorized — no username/password needed in the URL.
driver = webdriver.Chrome(options=options)

driver.get("https://example.com")
print(driver.title)

products = driver.find_elements(By.CSS_SELECTOR, ".product")
for p in products[:5]:
    title = p.find_element(By.CSS_SELECTOR, "h2").text
    price = p.find_element(By.CSS_SELECTOR, ".price").text
    print(title, price)

driver.quit()

Java mit selenium-wire-Äquivalent (BrowserMob)

Java verfügt nicht über selenium-wire, aber BrowserMob Proxy erfüllt dieselbe Aufgabe — starten Sie einen lokalen Proxy, der Basic-Auth-Header hinzufügt, und verweisen Sie Selenium dann darauf.

import net.lightbody.bmp.BrowserMobProxy;
import net.lightbody.bmp.BrowserMobProxyServer;
import net.lightbody.bmp.client.ClientUtil;
import org.openqa.selenium.Proxy;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import java.net.InetSocketAddress;

public class SeleniumShifter {
  public static void main(String[] args) {
    BrowserMobProxy proxy = new BrowserMobProxyServer();
    proxy.setChainedProxy(new InetSocketAddress("p.shifter.io", 443));
    proxy.chainedProxyAuthorization(
        "customer-USERNAME-country-de-sid-456DEF", "PASSWORD",
        net.lightbody.bmp.proxy.auth.AuthType.BASIC);
    proxy.start(0);

    Proxy seleniumProxy = ClientUtil.createSeleniumProxy(proxy);
    ChromeOptions options = new ChromeOptions();
    options.setProxy(seleniumProxy);
    options.addArguments("--headless=new");

    WebDriver driver = new ChromeDriver(options);
    try {
      driver.get("https://example.de");
      System.out.println(driver.getTitle());
    } finally {
      driver.quit();
      proxy.stop();
    }
  }
}

Selenium Grid (parallele Browser)

Wenn Sie auf einen Grid-Hub mit mehreren Nodes skalieren, konfigurieren Sie Shifter einmalig auf Capabilities-Ebene — jeder Node leitet den Datenverkehr über Shifter, ohne dass eine knotenspezifische Konfiguration erforderlich ist.

from selenium import webdriver
from selenium.webdriver.common.proxy import Proxy, ProxyType
from selenium.webdriver.chrome.options import Options

# Use selenium-wire-equivalent or Shifter IP whitelist for auth.
proxy_str = "p.shifter.io:443"

shared_proxy = Proxy()
shared_proxy.proxy_type = ProxyType.MANUAL
shared_proxy.http_proxy = proxy_str
shared_proxy.ssl_proxy  = proxy_str

options = Options()
options.proxy = shared_proxy
options.add_argument("--headless=new")

# Grid hub
HUB_URL = "http://selenium-hub.internal:4444/wd/hub"

driver = webdriver.Remote(command_executor=HUB_URL, options=options)

try:
    driver.get("https://example.com")
    print(driver.title, len(driver.page_source), "bytes")
finally:
    driver.quit()
FAQ

Häufig gestellte Fragen

Häufige Fragen zur Verwendung von Shifter mit Selenium.

Verwenden Sie selenium-wire (Python) oder BrowserMob Proxy (Java). Beide betreiben einen lokalen MITM-Proxy, der Basic-Auth-Header einfügt — Chrome und Firefox akzeptieren den inneren Proxy, ohne nach Zugangsdaten zu fragen, auch im Headless-Modus. Alternativ können Sie Shifters IP-Whitelist-Authentifizierung verwenden und Zugangsdaten vollständig weglassen.

Chrome zeigt im Headless-Modus keine Proxy-Authentifizierungsdialoge an, und es gibt keine integrierte Möglichkeit, Zugangsdaten über die Befehlszeile zu übergeben. selenium-wire umgeht dies, indem es einen lokalen Proxy betreibt, der die Authentifizierung selbst übernimmt. Die andere Option ist Shifters IP-Whitelist-Modus — die ausgehende IP Ihres Scraping-Hosts ist vorautorisiert, sodass keine Zugangsdaten benötigt werden.

Pass --proxy-server=http://p.shifter.io:443 in ChromeOptions. For username-password auth in headless mode, use selenium-wire (Python) or BrowserMob (Java). For visible Chrome, page.authenticate() in the underlying CDP works, but most scrapers use selenium-wire as the cleanest option.

Fügen Sie dem Proxy-Benutzernamen eine Sitzungs-ID hinzu — zum Beispiel `customer-USERNAME-country-us-sid-123ABC`. Jede Anfrage über dieselbe WebDriver-Sitzung verwendet dieselbe Residential IP. Fügen Sie `ttl-N` hinzu, um die IP für bis zu N Sekunden festzuhalten.

Ja. Konfigurieren Sie den Proxy auf Capabilities- oder ChromeOptions-Ebene beim Erstellen des Remote WebDrivers — jeder Grid-Node leitet den Datenverkehr über Shifter. Kombinieren Sie dies mit eindeutigen sids pro Worker, um paralleles Scraping zu skalieren, ohne IPs zu teilen.

Wenn Sie neu anfangen, ist Playwright in der Regel einfacher — Proxy-Authentifizierung funktioniert nativ, Multi-Browser-Unterstützung ist integriert und die API ist übersichtlicher. Selenium bleibt die richtige Wahl für bestehende Test-Suites, Mobile (Appium) oder wenn Ihr Team bereits darauf standardisiert ist. Shifter funktioniert mit beiden gleich gut.

Jetzt starten

Shifter verwenden mit Selenium

Steuern Sie den Selenium WebDriver über Shifters 205M+ Residential- und ISP-Proxys in Python, Java und weiteren Sprachen. Nativer --proxy-server-Flag, selenium-wire für headless-Authentifizierung und vollständige Selenium Grid-Unterstützung.

Shifter kostenlos testenIn Minuten eingerichtet. Jederzeit kuendbar.