Konfiguracja proxy dla przeglądarki: IP wyjściowe na sesję

Szukasz proxy dla przeglądarki i Google pokazuje okno dialogowe ustawień Chrome. To jest coś innego: kierowanie biblioteki agenta AI używanej w przeglądarce przez uwierzytelnione IP rezydencjalne, jedno na agenta.

Szukasz proxy dla przeglądarki i Google pokazuje okno dialogowe ustawień Chrome, API rozszerzenia chrome.proxy i tutorial korporacyjnego pliku PAC. Żadne z tego nie jest tym, czego szukałeś. Chcesz skierować browser-use - bibliotekę Python z 108k gwiazdkami na GitHub, która pozwala LLM sterować prawdziwą przeglądarką - przez uwierzytelnione proxy, aby twój agent nie atakował celu z twojego biurowego IP. To jest ten przewodnik: gdzie faktycznie znajduje się parametr, dlaczego przestaje działać po aktualizacji, jak dać każdemu równoległemu agentowi własne IP wyjściowe i co się dzieje z długim zadaniem, gdy IP się zmienia.

Gdzie faktycznie znajduje się parametr proxy dla przeglądarki

Proxy jest własnością sesji przeglądarki, a nie agenta. W obecnej bibliotece Browser jest aliasem dla BrowserSession - dokumentacja wyraźnie mówi, że to dokładnie ta sama klasa - więc każdy tutorial, który znajdziesz używający jednej nazwy, dotyczy drugiej. Parametr to proxy, a dokumentacja typuje go jako ProxySettings z czterema polami: server, bypass, username i password. Działa równoważny słownik, co większość ludzi przekazuje:

import asyncio
from browser_use import Agent, Browser
# llm = ...  your model of choice; see the browser-use docs for the import

PROXY = {
    "server": "http://gate.quantumproxies.io:8000",  # scheme is mandatory
    "username": "USER",
    "password": "PASS",
    "bypass": "localhost,127.0.0.1",                  # keep local calls off the proxy
}

browser = Browser(proxy=PROXY, headless=False)

async def main():
    agent = Agent(
        task="Open https://api.ipify.org?format=json and report the IP you see",
        llm=llm,
        browser_session=browser,
    )
    await agent.run()

asyncio.run(main())

Dwa szczegóły, które ludzie mylą. Po pierwsze, dane uwierzytelniające należą do pól username i password, a nie są wpychane do server - Chromium nie odpowie na wyzwanie uwierzytelnienia proxy z hasłem osadzonym w URL, a browser-use nie ma okna dialogowego do wpisania go. Po drugie, server potrzebuje schematu. gate.quantumproxies.io:8000 nie jest URL-em proxy; http://gate.quantumproxies.io:8000 jest. Jeśli dane uwierzytelniające sprawiają ci problemy, dodanie IP twojego serwera do białej listy całkowicie usuwa użytkownika:hasło z równania - brama rozpoznaje dzwoniącego, a przeglądarka nigdy nie widzi 407.

Dlaczego twoja konfiguracja proxy dla przeglądarki cicho nic nie robi

Najczęściej odwiedzana strona na ten temat po dokumentacji to GitHub issue #2445, zgłoszona w lipcu 2025: proxy, które działało w 0.1.45, przestało działać w 0.5.4, a jedyną wskazówką było to, że agent radośnie raportował DNS_PROBE_FINISHED_NXDOMAIN w swoim własnym podsumowaniu. Ten tryb awarii - agent opowiadający o błędzie sieciowym, jakby to był fakt o stronie - jest sygnaturą proxy, które jest w połowie skonfigurowane. Przepracuj tę listę, zanim spalisz więcej tokenów:

import requests

PROXY_URL = "http://USER:PASS@gate.quantumproxies.io:8000"
r = requests.get(
    "https://api.ipify.org?format=json",
    proxies={"http": PROXY_URL, "https": PROXY_URL},
    timeout=20,
)
print(r.status_code, r.text)   # must NOT be your own IP

Jeśli to wydrukuje zagraniczne IP, dane uwierzytelniające i brama są w porządku, a problem leży w okablowaniu sesji. Jeśli wydrukuje twój własny adres lub 407, napraw to najpierw. Nasz darmowy sprawdzacz IP mówi ci, jak wygląda wyjście z drugiej strony - ASN, typ i reputacja - co jest drugą rzeczą do sprawdzenia, gdy strony się ładują, ale każda z nich to CAPTCHA.

Lista kontrolna dopasowująca objawy proxy dla przeglądarki (błędy DNS, wyciek prawdziwego IP, konfiguracja, która działała w starszej wersji) do poprawek do sprawdzenia
Konfiguracja zazwyczaj wygląda dobrze. Awaria to prawie zawsze sesja, którą agent faktycznie otrzymał, brakujący schemat lub globalna zmienna środowiskowa.

Jedno proxy na sesję, aby równoległe agenty nie dzieliły IP wyjściowego

To jest cały powód, dla którego parametr znajduje się na sesji, a nie na globalnej konfiguracji. Uruchom dziesięciu agentów przez jedno wspólne Browser, a cel zobaczy dziesięciokrotnie większy ruch z jednego adresu, co jest najszybszym sposobem na spalenie IP rezydencjalnego. Zbuduj sesję wewnątrz korutyny zamiast tego i daj każdemu jego własny identyfikator sesji sticky, aby brama przypięła go do jednego wyjścia na czas trwania zadania:

import asyncio, secrets
from browser_use import Agent, Browser

def session_proxy(sid: str, country: str = "us"):
    return {
        "server": "http://gate.quantumproxies.io:8000",
        "username": f"USER-country-{country}-session-{sid}",
        "password": "PASS",
    }

async def run_task(task: str, country: str):
    sid = secrets.token_hex(3)                  # e.g. a1b2c3
    browser = Browser(
        proxy=session_proxy(sid, country),
        user_data_dir=None,                     # incognito: no shared cookies
        allowed_domains=["*.example.com"],      # keep the agent on target
    )
    agent = Agent(task=task, llm=llm, browser_session=browser)
    return await agent.run()

async def main():
    await asyncio.gather(
        run_task("Find the price of SKU-1", "us"),
        run_task("Find the price of SKU-1", "de"),
        run_task("Find the price of SKU-1", "gb"),
    )

asyncio.run(main())

Trzy flagi wykonują tam prawdziwą pracę. user_data_dir=None uruchamia tryb incognito, więc agenci nie mogą dziedziczyć ciasteczek od siebie nawzajem i cicho łączyć dwóch tożsamości na jednym profilu. allowed_domains ogranicza nawigację do listy wzorców - zauważ, że dzikie karty w pozycji TLD, jak example.*, są celowo odrzucane, a listy przekraczające sto wpisów są optymalizowane do zestawów z wyłączonym dopasowaniem wzorców. A identyfikator sesji w nazwie użytkownika to to, co sprawia, że IP wyjściowe jest stabilne; dokładne nazwy flag dla kraju i sesji znajdują się na twoim pulpicie nawigacyjnym, ale kształt jest taki sam wszędzie.

Wybór kraju wyjściowego na zadanie

Agenci, którzy kupują, porównują ceny lub sprawdzają dostępność, są domyślnie błędni, jeśli przeglądają z niewłaściwego kraju. Ponieważ proxy jest na sesję, kraj jest argumentem na zadanie - zamień country-us na country-de, a to samo zadanie zwróci niemieckie ceny. Wybierz spośród ponad 200 krajów w puli i utrzymuj resztę przeglądarki spójną z nim: przekaż pasujący język przez args (Chromium akceptuje --lang=de-DE) zamiast pozwalać, aby niemieckie IP wyjściowe żądało stron w angielskim amerykańskim. Dla powierzchni tylko mobilnych i wyjść o najwyższym zaufaniu, mobilne IP zachowują się inaczej, ponieważ NAT operatora umieszcza tysiące prawdziwych użytkowników za tym samym adresem.

Daj każdemu agentowi własne rezydencjalne IP wyjściowe

Schemat pokazujący kolejkę zadań rozpraszającą się na jedną sesję browser-use na agenta, każdą z własną sesją proxy sticky, aby strona docelowa widziała różne rezydencjalne IP
Zbuduj sesję wewnątrz zadania, a nie poza nim. Jeden Browser na agenta, jedna sesja sticky na Browser, jedno IP na tożsamość.

Co się dzieje, gdy IP zmienia się w trakcie zadania

Agenci są wolni w sposób, w jaki skrypty nie są. Między domyślną 0,5-sekundową pauzą po każdej akcji, minimalnym oczekiwaniem na stan strony wynoszącym 0,25 sekundy i oczekiwaniem na bezczynność sieciową wynoszącym 0,5 sekundy, browser-use spędza ponad sekundę na krok, zanim model cokolwiek powie - a czas rundy modelu zwykle trwa kilka sekund dłużej. Zadanie piętnastoetapowe trwa więc od jednej do dwóch minut zegara ściennego. Jeśli twoje IP wyjściowe zmienia się na żądanie, strona zobaczy inny adres na każdym z tych kroków: logowanie się przerywa, koszyk się opróżnia, a agent raportuje, że przycisk do kasy zniknął.

Naprawą jest sesja sticky, której okno komfortowo przekracza czas trwania najgorszego przypadku zadania, a nie średnią. Zmierz kilka rzeczywistych przebiegów, weź najwolniejszy i dodaj margines - agenci ponawiają próby, a ponowienie podwaja czas. Gdy zadanie naprawdę musi przetrwać jakiekolwiek okno sticky, podziel je: zaloguj się i wyeksportuj stan, a następnie wznow w nowej sesji z ciasteczkami, które zapisałeś za pomocą storage_state. A jeśli wybierasz między rotacją na żądanie a sticky w ogóle, nasza lista kontrolna infrastruktury dla agentów AI obejmuje resztę warstwy wokół tej decyzji.

Trzymaj proxy z dala od wywołań LLM

To kosztuje prawdziwe pieniądze i prawie nikt tego nie zauważa. Ustawienie HTTPS_PROXY jako zmiennej środowiskowej, aby proxy "działało wszędzie", również kieruje każde wywołanie API modelu przez twoją bramę rezydencjalną - monity i odpowiedzi, na każdym kroku, rozliczane za gigabajt za przywilej pójścia dłuższą drogą. Skonfiguruj proxy tylko na Browser i pozostaw środowisko procesu w spokoju. Podczas liczenia bajtów, zauważ, że browser-use ładuje domyślnie uBlock Origin przez enable_default_extensions: zostaw to włączone, ponieważ każde żądanie reklamy, które zabija, to jedno, za które nie płacisz. Pełna arytmetyka znajduje się w naszym podziale kosztów agenta AI w przepustowości, a wersja klasycznego skrobania tego kompromisu znajduje się w przeglądarka bezgłowa vs żądania HTTP.

Często zadawane pytania

Jak ustawić proxy w browser-use?

Przekaż proxy= podczas konstruowania Browser (również eksportowanego jako BrowserSession), a następnie przekaż ten obiekt do Agent. Wartość zawiera server z wyraźnym schematem http://, plus username, password i opcjonalną listę bypass. Nie ma ustawienia proxy na poziomie agenta - należy do sesji.

Dlaczego moja konfiguracja proxy dla browser-use nie działa?

W kolejności prawdopodobieństwa: agent działa na innej sesji niż ta, którą skonfigurowałeś, server brakuje schematu, ustawiłeś cdp_url, więc przeglądarka została uruchomiona gdzie indziej bez flag proxy, lub globalna zmienna środowiskowa proxy cię nadpisuje. Zweryfikuj proxy za pomocą zwykłego klienta HTTP najpierw - błąd DNS w logu agenta zwykle oznacza, że żadne proxy nie jest podłączone.

Czy każdy agent browser-use może używać innego IP?

Tak, i powinieneś. Utwórz Browser wewnątrz każdej korutyny zadania z własnymi danymi uwierzytelniającymi proxy, zamiast dzielić jedną instancję. Dodanie unikalnego identyfikatora sesji do nazwy użytkownika bramy przypina każdego agenta do odrębnego wyjścia na czas jego działania, więc dziesięciu równoległych agentów wygląda jak dziesięciu użytkowników zamiast jednego bardzo zajętego.

Jaki typ proxy najlepiej pasuje do agentów browser-use?

Rotacyjne rezydencjalne do badań i sprawdzania cen, gdzie każde zadanie jest niezależne, sticky rezydencjalne do wszystkiego z logowaniem lub koszykiem, a mobilne, gdy cel jest wrogi lub tylko mobilny. IP centrów danych są w porządku dla wewnętrznych celów i niechronionych stron, a są znacznie tańsze za gigabajt - co ma znaczenie, ponieważ agent przeglądarki przesyła wiele gigabajtów.

Czy proxy zapobiega wykryciu browser-use?

Nie. Proxy naprawia tylko warstwę IP; odcisk palca zautomatyzowanego Chromium to osobny problem, podobnie jak zachowanie agenta, który klika z precyzją milisekundową. Zaufane wyjścia rezydencjalne usuwają najłatwiejszy sygnał, ale połącz je z przeglądarką zorientowaną na ukrywanie, jeśli cel stosuje poważne zarządzanie botami.

Nic tutaj nie jest egzotyczne: proxy jest własnością sesji, a dwie rzeczy, które je psują, to brakujący schemat i sesja, której nigdy nie przekazałeś. Zrób to dobrze, daj każdemu równoległemu agentowi własne sticky wyjście i trzymaj bramę z dala od wywołań API modelu. Dla szerszego obrazu, zobacz naszą mapę frameworków anty-detekcji i uwierzytelnionych proxy.

Uruchom browser-use na ponad 90M IP rezydencjalnych w ponad 200 krajach