Proxys et geoip
Faites passer le navigateur par votre propre proxy, y compris en SOCKS5 avec identifiant et mot de passe sur le build sous licence, et laissez geoip aligner le fuseau horaire, la langue et l'adresse WebRTC sur l'IP de sortie du proxy.
Adapter automatiquement la région au proxy (geoip)
Passez geoip avec un proxy et le SDK résout l’IP de sortie du proxy — en la cherchant dans la base hors ligne geoip-all-in-one — puis définit pour cette région un ensemble cohérent fuseau horaire + langue principale de navigator + Accept-Language + IP WebRTC. Plus besoin d’associer à la main un fuseau horaire à chaque proxy :
from clearcote import launch
browser = launch(
fingerprint="user-7423",
proxy={"server": "http://host:8080", "username": "u", "password": "p"},
geoip=True, # timezone + language auto-matched to the proxy's region
)Il définit aussi la géolocalisation et la liste complète navigator.languages de la région, fonctionne avec les proxys HTTP et SOCKS5 (identifiants compris) et existe dans les trois SDK (Geoip = true en .NET). La première exécution télécharge la base de données (environ 50 MB). Si la région ne peut pas être résolue, le lancement s’arrête avec une GeoipError au lieu de démarrer discrètement avec l’horloge et la langue de cette machine ; définissez à la fois timezone et acceptLanguage pour lancer quand même. La recherche dispose de 20 secondes (CLEARCOTE_GEOIP_TIMEOUT_SECONDS) ; en .NET, l’erreur est GeoipException. Sans geoip ni timezone explicite, le fuseau horaire suit la langue — en-US signifie New York, même derrière un proxy allemand.
Vous préférez le définir vous-même ? Utilisez acceptLanguage (Node) / accept_language (Python), par exemple "en-US,en" — il définit l’en-tête Accept-Language, le tableau complet navigator.languages et navigator.language — et Intl / toLocaleString le suivent également.
SOCKS5 avec identifiants
Chromium d’origine ne sait pas du tout s’authentifier auprès d’un proxy SOCKS5 — il n’implémente pas la sous-négociation nom d’utilisateur/mot de passe —, d’où la solution habituelle : un relais local qui détient les identifiants. Le build sous licence l’implémente dans le moteur (RFC 1929) : aucun relais n’est nécessaire. Passez le nom d’utilisateur et le mot de passe dans des champs séparés ou dans l’adresse (socks5://user:pass@host:port) ; dans les deux cas, le SDK les transmet au moteur. Les identifiants dans l’adresse nécessitent le SDK 0.31.1 ou plus récent : les SDK plus anciens laissaient Playwright les abandonner, et le proxy ne recevait aucun identifiant.
from clearcote import launch_persistent_context
ctx = launch_persistent_context(
"./profile",
proxy={"server": "socks5://proxy.example.net:1080", "username": "user", "password": "pass"},
)
page = ctx.pages[0] if ctx.pages else ctx.new_page()
page.goto("https://api.ipify.org?format=json") # confirm the exit IP is the proxy'sNécessite le build sous licence (Gratuit avec GitHub ou Pro, moteur 151 r14 ou plus récent) ; le build ouvert ne sait pas s’authentifier auprès d’un proxy SOCKS5, utilisez donc avec lui un relais local ou un proxy HTTP.
Vérifiez toujours l’adresse de sortie avant de faire confiance à une session. Un proxy qui tombe en panne sans rien dire et laisse passer le trafic l’envoie depuis votre propre IP, et toutes les autres précautions deviennent vaines. Vérifiez-la une fois au lancement auprès d’un service qui renvoie l’adresse vue de l’extérieur, plutôt que de la tenir pour acquise.