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

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.