Cas d'Usage

Rotation du proxy pour le grattage de CAPTCHA

La rotation du proxy réduit la fréquence des CAPTCHA en répartissant les requêtes sur plusieurs adresses IP. Combiné avec CaptchaAI pour résoudre les CAPTCHA qui apparaissent encore, vous obtenez un pipeline de scraping fiable qui gère n'importe quel système anti-bot.

Pourquoi la rotation des proxys réduit les CAPTCHA

Les sites déclenchent des CAPTCHA en fonction de modèles de requête par IP :

Facteur IP unique Rotation des procurations
Requêtes par minute 10+ déclenche CAPTCHA Distribué sur les IP
Réputation IP Se dégrade avec le temps Nouvelles IP du pool
Modèles de session Modèles suspects visibles Modèles répartis sur les adresses IP
Cohérence géographique Emplacement unique Diversité géographique naturelle

Types de proxy pour le grattage

Tapez Idéal pour Taux CAPTCHA Coût
Résidentiel Cibles à forte valeur ajoutée (Google, Amazon) Le plus bas $$$
Mobile Détection ultra-faible Le plus bas $$$$
ISP/Static Des séances soutenues Faible $$
Centre de données Sites à gros volume et indulgents Plus haut $

Recommandation : Utilisez des proxys résidentiels pour les sites dotés de déclencheurs CAPTCHA agressifs. Les proxys de centre de données fonctionnent pour les sites moins protégés.

Rotation de proxy de base (Python)

import requests
import random
import time

PROXIES = [
    "http://user:pass@proxy1.example.com:8080",
    "http://user:pass@proxy2.example.com:8080",
    "http://user:pass@proxy3.example.com:8080",
]

API_KEY = "YOUR_API_KEY"

def get_random_proxy():
    proxy = random.choice(PROXIES)
    return {"http": proxy, "https": proxy}

def scrape_with_rotation(url):
    proxy = get_random_proxy()
    session = requests.Session()
    session.proxies = proxy
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
    })

    resp = session.get(url)

    # If CAPTCHA appears, solve it
    if "g-recaptcha" in resp.text or "captcha" in resp.text.lower():
        from bs4 import BeautifulSoup
        soup = BeautifulSoup(resp.text, "html.parser")
        rc = soup.find("div", class_="g-recaptcha")
        if rc:
            site_key = rc["data-sitekey"]
            token = solve_captcha(site_key, url)
            resp = session.post(url, data={"g-recaptcha-response": token})

    return resp.text

def solve_captcha(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": page_url
    })
    task_id = resp.text.split("|")[1]

    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        if result.text.startswith("OK|"): return result.text.split("|")[1]
        raise Exception(result.text)
    raise TimeoutError()

Rotation du proxy intelligent

Suivez quels proxys déclenchent des CAPTCHA et évitez-les :

from collections import defaultdict
import random

class SmartProxyRotator:
    def __init__(self, proxies):
        self.proxies = proxies
        self.captcha_count = defaultdict(int)
        self.success_count = defaultdict(int)

    def get_proxy(self):
        # Prefer proxies with lower CAPTCHA rates
        scored = []
        for proxy in self.proxies:
            total = self.captcha_count[proxy] + self.success_count[proxy]
            if total == 0:
                score = 0.5  # Unknown proxy, neutral score
            else:
                score = self.success_count[proxy] / total
            scored.append((proxy, score))

        # Weight selection by score
        scored.sort(key=lambda x: x[1], reverse=True)
        top_proxies = scored[:max(len(scored) // 2, 1)]
        proxy = random.choice(top_proxies)[0]
        return proxy

    def report_success(self, proxy):
        self.success_count[proxy] += 1

    def report_captcha(self, proxy):
        self.captcha_count[proxy] += 1

# Usage
rotator = SmartProxyRotator(PROXIES)

def scrape(url):
    proxy = rotator.get_proxy()
    resp = requests.get(url, proxies={"http": proxy, "https": proxy})

    if "captcha" in resp.text.lower():
        rotator.report_captcha(proxy)
        # Solve CAPTCHA...
    else:
        rotator.report_success(proxy)

    return resp.text

Rotation des proxys avec Selenium

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

def create_driver_with_proxy(proxy_url):
    options = Options()
    options.add_argument(f"--proxy-server={proxy_url}")
    options.add_argument("--disable-blink-features=AutomationControlled")
    return webdriver.Chrome(options=options)

# Rotate proxy per session
proxy = random.choice(PROXIES)
driver = create_driver_with_proxy(proxy)
driver.get("https://example.com")

Résolution de proxy + CAPTCHA pour Cloudflare

La résolution de Cloudflare Challenge nécessite de transmettre un proxy à CaptchaAI :

proxy = "http://user:pass@proxy.example.com:8080"

resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "cloudflare_challenge",
    "pageurl": "https://example.com",
    "proxy": proxy,
    "proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]

# Poll for cf_clearance cookie
# Use the same proxy for subsequent requests

Meilleures pratiques

  1. ** Faites correspondre la géolocalisation du proxy à la cible ** – Utilisez des proxys américains pour les sites américains
  2. Une session par proxy – Ne réutilisez pas les sessions sur différents proxys
  3. ** Limite de débit par proxy ** - Max 5 à 10 requêtes /minute par IP
  4. Surveillez les taux de CAPTCHA – Suivez quels proxys déclenchent plus de CAPTCHA
  5. Utilisez des sessions persistantes – Conservez le même proxy pour les flux de travail en plusieurs étapes
  6. Gérer les échecs de proxy – Réessayez avec un autre proxy en cas d'erreurs de connexion

Dépannage

Problème Corriger
Tous les proxy déclenchent des CAPTCHA Passez aux proxys résidentiels ; réduire le taux
Erreurs d'expiration du proxy Supprimez les proxys lents du pool ; augmenter le délai d'attente
Contenu différent par proxy Certains sites proposent du contenu géo-spécifique ; normaliser
Les jetons CAPTCHA ne fonctionnent pas avec le proxy Assurez-vous que le jeton est utilisé à partir de la même session/IP

FAQ

Ai-je besoin de proxys si j'utilise CaptchaAI ?

Pas strictement : CaptchaAI peut résoudre les CAPTCHA de toute façon. Mais les proxys réduisent la fréquence d'apparition des CAPTCHA, ce qui permet d'économiser du temps et des coûts d'API.

Dois-je utiliser le même proxy pour la résolution et le scraping de CAPTCHA ?

Pour la plupart des types CAPTCHA, le jeton est valide quelle que soit l'adresse IP. Pour Cloudflare Challenge, vous devez utiliser le même proxy puisque le cookie cf_clearance est lié à l'IP.

De combien de proxys ai-je besoin ?

Pour un scraping modéré (1 000 pages/day), 10 à 20 proxys résidentiels rotatifs suffisent. Pour un volume élevé, utilisez un fournisseur proxy avec rotation automatique.

Guides connexes

Les commentaires sont désactivés pour cet article.