Retour au blog

Proxies pour le scraping des offres d'emploi sur hh.ru, Superjob et LinkedIn : guide complet

Guide détaillé pour configurer un proxy pour le scraping des sites d'emploi : choix du type de proxy, contournement des protections de hh.ru et Superjob, configuration de la rotation des IP et gestion des captchas.

📅12 mars 2026
```html

Le scraping de job boards est l'un des scénarios les plus demandés pour la collecte de données en analyse RH, surveillance du marché du travail et automatisation du recrutement. Cependant, les sites d'offres d'emploi se protègent activement contre la collecte automatique de données : ils bloquent les IP après 50-100 requêtes, affichent des captchas et bannissent les comptes suspects. Dans cet article, nous allons voir comment configurer correctement des proxies pour un scraping stable sur hh.ru, Superjob, LinkedIn et d'autres plateformes sans blocages.

Pourquoi les job boards bloquent le scraping et comment fonctionne la protection

Les sites d'offres d'emploi perdent de l'argent à cause du scraping : les données sont vendues à des concurrents, des agrégateurs sans licence sont créés, et les employeurs contournent les publications payantes. C'est pourquoi toutes les grandes plateformes ont mis en place une protection multi-niveaux contre la collecte automatique de données.

Principales méthodes de protection des job boards :

  • Limitation de taux par IP — hh.ru bloque les IP après 80-120 requêtes par heure, Superjob — après 50-70 requêtes. Le blocage peut durer de 1 heure à 24 heures.
  • Fingerprinting du navigateur — les sites analysent l'User-Agent, les en-têtes HTTP, la résolution d'écran, les polices installées. Si les données ne correspondent pas à un vrai navigateur — la requête est bloquée.
  • Vérifications JavaScript — de nombreux sites utilisent Cloudflare ou leurs propres scripts pour vérifier que la requête provient d'un vrai navigateur, et non d'un bot.
  • Pièges Honeypot — liens et champs cachés que seul le parser peut voir. Si le bot y accède — l'IP est mise sur liste noire.
  • Captcha en cas d'activité suspecte — apparaît après une série de requêtes rapides ou lors de l'utilisation d'IP de centres de données.

Sans proxies, vous pourrez scraper au maximum 100-200 offres d'emploi, après quoi votre IP sera bannie. Pour une collecte de données à grande échelle (des milliers d'offres par jour), les proxies deviennent un outil indispensable.

Important : Le scraping doit être conforme aux conditions d'utilisation du site. De nombreux job boards fournissent des API officielles pour un accès légal aux données. Par exemple, hh.ru a une API gratuite avec une limite de requêtes, qui convient à la plupart des tâches.

Quel type de proxy choisir pour le scraping d'offres d'emploi

Le choix du type de proxy dépend de l'échelle du scraping, du budget et des exigences de vitesse. Examinons trois options principales avec des scénarios d'utilisation spécifiques.

Type de proxy Vitesse Risque de bannissement Quand utiliser
Proxies de centre de données Élevée (50-200 ms) Élevé Test de parser, collecte de données publiques sans autorisation
Proxies résidentiels Moyenne (200-800 ms) Faible Scraping à grande échelle sur hh.ru, Superjob avec rotation IP
Proxies mobiles Moyenne (300-1000 ms) Très faible Scraping avec autorisation, contournement de la protection stricte de LinkedIn

Proxies de centre de données pour le scraping

C'est l'option la plus rapide et la moins chère, mais avec des limitations. Les IP de centre de données sont facilement reconnues par les sites, donc elles ne conviennent que pour des tâches simples : scraping de listes d'offres d'emploi sans autorisation, collecte de données publiques, test de parser avant de passer aux proxies résidentiels.

Quand les proxies de centre de données fonctionnent :

  • Scraping d'un petit volume de données (jusqu'à 500 offres par jour)
  • Collecte de données sur des sites sans protection stricte (petits job boards régionaux)
  • Utilisation d'API officielles avec rotation IP pour contourner les limites de taux
  • Scraping de flux RSS et de fichiers XML d'offres d'emploi

Pour hh.ru et Superjob, les proxies de centre de données fonctionneront de manière instable : vous recevrez un captcha après 20-30 requêtes, et de nombreuses IP sont déjà sur les listes noires de ces sites.

Proxies résidentiels — le choix optimal pour les job boards

Les proxies résidentiels utilisent des adresses IP d'utilisateurs domestiques réels, donc les sites les perçoivent comme des visiteurs ordinaires. C'est le meilleur rapport qualité-prix pour le scraping d'offres d'emploi.

Avantages pour le scraping des job boards :

  • Faible risque de blocage — hh.ru et Superjob ne peuvent pas distinguer une IP résidentielle d'un utilisateur réel
  • Grand pool d'adresses IP — possibilité de configurer la rotation à chaque requête ou toutes les 5-10 minutes
  • Liens géographiques — possibilité de scraper des offres d'un certain ville en utilisant des IP de cette région
  • Stabilité — une seule IP résidentielle peut traiter 200-500 requêtes sans blocage

Pour un scraping à grande échelle (plus de 1000 offres par jour), les proxies résidentiels avec rotation IP sont la solution standard. Vous configurez le changement d'IP toutes les 5-10 minutes, ajoutez des délais aléatoires entre les requêtes (3-7 secondes) et obtenez une collecte de données stable sans blocages.

Proxies mobiles pour LinkedIn et scraping avec autorisation

Les proxies mobiles utilisent des IP d'opérateurs mobiles. Leur principal avantage est qu'une seule IP est utilisée par des centaines d'utilisateurs réels en même temps, donc les sites ne peuvent pas bloquer cette adresse sans risquer de bloquer des milliers de visiteurs ordinaires.

Quand les proxies mobiles sont nécessaires :

  • Scraping de LinkedIn — cette plateforme a la protection la plus stricte contre les bots et bloque agressivement les IP de centres de données et même les IP résidentiels
  • Travail avec autorisation — si vous devez scraper des offres fermées ou des données de profils, les IP mobiles réduisent le risque de bannissement du compte
  • Scraping de job boards étrangers — Indeed, Glassdoor, Monster utilisent des systèmes de protection avancés, où les IP mobiles fonctionnent de manière plus fiable
  • Contourner des blocages stricts — si vos proxies résidentiels commencent à recevoir des captchas, passer aux mobiles résoudra le problème

L'inconvénient des proxies mobiles est leur coût élevé et leur vitesse inférieure. Mais pour des tâches critiques, où le blocage est inacceptable, c'est le meilleur choix.

Particularités du scraping de hh.ru : protection et méthodes de contournement

hh.ru est le plus grand site d'offres d'emploi en Russie avec la protection la plus avancée contre le scraping parmi les job boards nationaux. Le site utilise une combinaison de limitation de taux, de fingerprinting et d'analyse comportementale pour détecter les bots.

Comment fonctionne la protection de hh.ru

1. Limites par adresse IP : Après 80-120 requêtes par heure depuis une seule IP, le site commence à afficher un captcha ou renvoie un HTTP 429 (Trop de requêtes). Le blocage dure de 1 à 6 heures en fonction de l'agressivité du scraping.

2. Vérification de l'User-Agent et des en-têtes : hh.ru analyse les en-têtes des requêtes HTTP. Si l'User-Agent ne correspond pas à un vrai navigateur ou si des en-têtes standards (Accept-Language, Accept-Encoding) sont absents, la requête est bloquée.

3. Vérifications JavaScript : Certaines pages de hh.ru nécessitent l'exécution de JavaScript pour charger des données. Un simple parser HTTP sans navigateur headless ne pourra pas obtenir le contenu complet.

4. Liens Honeypot : Sur les pages, il y a des éléments cachés que seul le parser peut voir. Si votre script accède à ces liens — l'IP est mise sur liste noire pendant 24 heures.

Stratégie de contournement de la protection de hh.ru avec des proxies

Pour un scraping stable de hh.ru sans blocages, utilisez la configuration suivante :

Configuration optimale pour le scraping de hh.ru :

  • Type de proxy : Résidentiels avec rotation IP toutes les 5-10 minutes
  • Délai entre les requêtes : 4-8 secondes (valeur aléatoire)
  • User-Agent : Rotation d'User-Agents réels de navigateurs modernes (Chrome, Firefox, Safari des dernières versions)
  • En-têtes : Ensemble complet d'en-têtes standards de navigateur (Accept, Accept-Language, Accept-Encoding, Referer)
  • Cookies : Sauvegarde et transmission des cookies entre les requêtes dans le cadre d'une même session
  • Limite de requêtes : Pas plus de 60-80 requêtes par IP, après quoi changement de proxy

Exemple d'une séquence d'actions sécurisée :

  1. Connectez-vous à un proxy résidentiel avec une IP de la région souhaitée (par exemple, Moscou)
  2. Faites la première requête sur la page d'accueil de hh.ru, obtenez et sauvegardez les cookies
  3. Attendez 5-7 secondes (simulation de lecture de la page)
  4. Faites une requête sur la page de recherche d'offres avec les filtres nécessaires
  5. Scrapez la liste des offres (généralement 20-50 par page)
  6. Pour chaque offre, faites une requête sur la page détaillée avec un délai de 4-6 secondes
  7. Après 60-70 requêtes, changez de proxy et répétez le cycle

Avec cette stratégie, vous pouvez scraper 1000-2000 offres par jour avec un seul flux sans aucun blocage. Si un volume plus important est nécessaire, lancez plusieurs flux parallèles avec différents proxies.

Conseil : hh.ru fournit une API gratuite pour accéder aux offres. Pour la plupart des tâches (analyse du marché du travail, surveillance des salaires), l'API sera une solution plus stable que le scraping HTML. Les proxies peuvent être utilisés pour la rotation IP lors de l'utilisation de l'API, afin de contourner les limites de taux.

Scraping de Superjob, LinkedIn et des plateformes étrangères

Superjob : particularités de la protection

Superjob a une protection moins stricte par rapport à hh.ru, mais lutte toujours activement contre le scraping. Les principales différences :

  • Limite de taux plus basse : Le blocage survient après 50-70 requêtes par heure (contre 80-120 pour hh.ru)
  • Vérification des en-têtes moins stricte : Il est possible d'utiliser un ensemble simplifié d'en-têtes
  • Absence de protection JavaScript : La plupart des données sont accessibles via une simple requête HTTP sans navigateur headless
  • Blocage régional : Certaines offres ne sont accessibles qu'avec une IP d'une région spécifique

Pour Superjob, des proxies résidentiels avec rotation toutes les 10-15 minutes et un délai entre les requêtes de 3-5 secondes suffisent. Cela permettra de scraper de manière stable 500-1000 offres par jour.

LinkedIn : la protection la plus stricte

LinkedIn est une histoire à part. La plateforme utilise des algorithmes avancés d'apprentissage automatique pour détecter les bots et dispose de l'un des systèmes de protection les plus agressifs parmi tous les réseaux sociaux et job boards.

Particularités de la protection LinkedIn :

  • Autorisation obligatoire : La plupart des données ne sont accessibles qu'aux utilisateurs autorisés
  • Analyse comportementale : LinkedIn analyse les modèles d'action : vitesse de défilement, mouvements de la souris, temps passé sur la page
  • Blocage des comptes : En cas d'activité suspecte, non seulement l'IP est bloquée, mais aussi le compte lui-même
  • Restrictions sur les vues de profils : Les comptes gratuits peuvent consulter un nombre limité de profils par mois
  • Exécution obligatoire de JavaScript : Sans navigateur headless, le scraping est impossible

Stratégie de scraping LinkedIn :

  1. Utilisez des proxies mobiles — ils offrent le risque de blocage le plus bas. Une seule IP mobile peut être utilisée pour 100-200 vues de profils par jour.
  2. Un navigateur headless est obligatoire — utilisez Puppeteer ou Playwright avec une configuration de fingerprint réel du navigateur (résolution d'écran, WebGL, Canvas).
  3. Vitesse de scraping lente — pas plus de 20-30 profils par heure avec un seul compte. Ajoutez des délais de 10-20 secondes entre les vues.
  4. Imitation d'un comportement réel — défilement de la page, clics aléatoires, transitions entre les sections du profil.
  5. Réchauffement des comptes — les nouveaux comptes LinkedIn ne peuvent pas être utilisés immédiatement pour le scraping. Il faut 1-2 semaines pour simuler l'activité d'un utilisateur ordinaire.
  6. Rotation des comptes — utilisez plusieurs comptes avec différents proxies pour répartir la charge.

Le scraping de LinkedIn est la tâche la plus complexe parmi tous les job boards. Si vous avez besoin de données de cette plateforme, envisagez d'utiliser l'API officielle Sales Navigator ou des services tiers qui fournissent des données légalement.

Job boards étrangers : Indeed, Glassdoor, Monster

Les plateformes étrangères ont généralement une protection plus stricte que les sites russes (à l'exception de hh.ru). Les principales caractéristiques :

  • Indeed — utilise Cloudflare avec des vérifications JavaScript. Un navigateur headless et des proxies résidentiels/mobiles du pays dont vous scrapez les offres sont nécessaires.
  • Glassdoor — nécessite une autorisation pour voir la plupart des données. Bloque activement les IP de centres de données. Utilisez des proxies résidentiels et une vitesse de scraping lente (délai de 8-12 secondes).
  • Monster — dispose d'une API pour les partenaires, mais pour le scraping HTML, des proxies résidentiels avec une liaison géographique au pays souhaité sont nécessaires.

Pour toutes les plateformes étrangères, la liaison géographique des proxies est cruciale. Si vous scrapez des offres aux États-Unis, utilisez des IP résidentiels américaines. Les requêtes avec des IP d'autres pays peuvent susciter des soupçons et entraîner un blocage.

Configuration de la rotation IP et des délais entre les requêtes

Une configuration correcte de la rotation des proxies est la clé d'un scraping stable sans blocages. Examinons deux stratégies principales : rotation à chaque requête et rotation dans le temps.

Rotation à chaque requête (Rotating Proxies)

Dans cette approche, chaque requête HTTP provient d'une nouvelle adresse IP. C'est la méthode la plus sûre, mais elle a des limitations :

Avantages :

  • Impossible de suivre l'activité d'une seule IP
  • Plus de requêtes peuvent être effectuées dans un temps donné
  • Pas besoin de suivre les limites pour chaque IP

Inconvénients :

  • Impossible de conserver la session (les cookies sont perdus lors du changement d'IP)
  • Ne convient pas pour le scraping avec autorisation
  • Certains sites bloquent les requêtes si l'IP change trop souvent

La rotation à chaque requête convient pour le scraping de pages publiques sur hh.ru et Superjob sans autorisation. Elle se configure via le paramètre du fournisseur de proxies (généralement un endpoint spécial avec rotation automatique).

Rotation dans le temps (Sticky Sessions)

Dans cette approche, une IP est utilisée pendant une période déterminée (5-30 minutes), après quoi un changement automatique se produit. C'est l'option optimale pour la plupart des tâches de scraping de job boards.

Intervalles de rotation recommandés :

Site Intervalle de rotation Max. requêtes par IP Délai entre les requêtes
hh.ru 5-10 minutes 60-80 4-8 secondes
Superjob 10-15 minutes 50-70 3-5 secondes
LinkedIn 30-60 minutes 20-40 10-20 secondes
Indeed 10-20 minutes 40-60 5-10 secondes
Glassdoor 15-30 minutes 30-50 8-12 secondes

Configuration de délais aléatoires

Un délai fixe entre les requêtes (par exemple, exactement 5 secondes) semble suspect pour les systèmes de protection. Un utilisateur réel ne peut pas agir avec une telle précision. Utilisez toujours des délais aléatoires dans une plage.

Exemples de mise en œuvre de délais aléatoires :

// Python
import time
import random

# Délai de 4 à 8 secondes
delay = random.uniform(4, 8)
time.sleep(delay)

# Logique plus complexe : parfois faire une longue pause
if random.random() < 0.1:  # 10% de probabilité
    time.sleep(random.uniform(15, 30))  # Simulation d'une distraction de l'utilisateur
else:
    time.sleep(random.uniform(4, 8))
// JavaScript / Node.js
const sleep = (min, max) => {
  const delay = Math.random() * (max - min) + min;
  return new Promise(resolve => setTimeout(resolve, delay * 1000));
};

// Utilisation
await sleep(4, 8);  // Délai de 4-8 secondes

// Avec une probabilité de longue pause
if (Math.random() < 0.1) {
  await sleep(15, 30);  // 10% de probabilité de longue pause
} else {
  await sleep(4, 8);
}

L'ajout de pauses longues aléatoires (15-30 secondes) avec une probabilité de 5-10% rend le comportement du parser encore plus similaire à celui d'un utilisateur réel, qui peut être distrait par un appel téléphonique ou une autre tâche.

Traitement des captchas et autres blocages

Même avec une configuration correcte des proxies et des délais, vous pouvez être confronté à des captchas ou à d'autres types de blocages. Examinons comment réagir correctement à ces situations.

Types de blocages des job boards

1. HTTP 429 Too Many Requests — le type de blocage le plus fréquent. Le site indique clairement que vous avez dépassé la limite de requêtes. En général, l'en-tête de réponse contient un Retry-After, qui indique combien de secondes il faut attendre avant de pouvoir renouveler la requête.

Comment traiter : Changer immédiatement de proxy et ajouter l'IP actuelle à la liste noire pour la durée indiquée dans Retry-After (généralement 1-6 heures). Si Retry-After est absent, ajoutez l'IP à la liste noire pour 2 heures.

2. HTTP 403 Forbidden — l'IP est bloquée au niveau du serveur. C'est un blocage plus sérieux, qui peut durer de quelques heures à 24 heures.

Comment traiter : Changer de proxy et ajouter l'IP à la liste noire à long terme (24 heures). Analyser les journaux : il se peut que vous soyez trop agressif dans votre scraping ou que vous utilisiez des IP de centres de données là où des IP résidentiels sont nécessaires.

3. Captcha (CAPTCHA) — le site affiche une vérification "je ne suis pas un robot". Cela signifie que votre comportement a semblé suspect, mais l'IP n'est pas encore complètement bloquée.

Comment traiter : Il y a trois options :

  • Changement de proxy — le moyen le plus simple. L'IP actuelle est ajoutée à la liste noire pendant 6-12 heures.
  • Résolution automatique de captcha — utilisation de services comme 2Captcha, Anti-Captcha, CapSolver. Ils coûtent entre 1 et 3 $ pour 1000 résolutions.
  • Résolution manuelle — si le scraping n'est pas critique en termes de temps, vous pouvez envoyer le captcha pour résolution manuelle à un opérateur.

4. Cloudflare Challenge — vérification JavaScript qui nécessite l'exécution de code dans le navigateur. Une bibliothèque HTTP ordinaire ne passera pas cette vérification.

Comment traiter : Utiliser un navigateur headless (Puppeteer, Playwright, Selenium) avec une configuration de fingerprint réel. Des bibliothèques comme puppeteer-extra-plugin-stealth aident à contourner la détection du mode headless.

Intégration des services de résolution de captcha

Si vous avez décidé de résoudre automatiquement les captchas, voici un exemple d'intégration avec le service populaire 2Captcha :

// Python avec la bibliothèque 2captcha-python
from twocaptcha import TwoCaptcha
import requests

solver = TwoCaptcha('YOUR_API_KEY')

try:
    # Résolution de reCAPTCHA v2
    result = solver.recaptcha(
        sitekey='6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-',
        url='https://hh.ru/search/vacancy',
        proxy={
            'type': 'HTTPS',
            'uri': 'login:password@ip:port'
        }
    )
    
    # Obtention du token de résolution
    captcha_token = result['code']
    
    # Envoi de la requête avec le token
    response = requests.post(
        'https://hh.ru/search/vacancy',
        data={
            'g-recaptcha-response': captcha_token,
            # autres paramètres du formulaire
        },
        proxies={
            'http': 'http://login:password@ip:port',
            'https': 'http://login:password@ip:port'
        }
    )
    
except Exception as e:
    print(f'Erreur de résolution de captcha : {e}')

La résolution d'un captcha prend 10-30 secondes et coûte environ 0,001-0,003 $. Pour un scraping à grande échelle, cela peut être coûteux, donc il est préférable de configurer le scraping de manière à ce que les captchas apparaissent aussi rarement que possible.

Système de surveillance et d'alertes

Pour un fonctionnement stable du parser, il est important de configurer la surveillance des blocages et des alertes automatiques :

À surveiller :

  • Pourcentage de requêtes réussies — si cela tombe en dessous de 90%, vérifiez les proxies et les paramètres
  • Nombre de captchas par heure — si plus de 5-10, vous scrapez trop agressivement
  • Vitesse de réponse moyenne des proxies — si elle augmente brusquement, les proxies sont peut-être surchargés
  • Nombre d'erreurs 429/403 — indicateur de la qualité des proxies et de la justesse des paramètres
  • Liste des IP bloquées — si la même IP est constamment bloquée, excluez-la du pool

Configurez l'envoi de notifications (Telegram, email, Slack) si le pourcentage de requêtes réussies tombe en dessous d'un seuil critique. Cela permettra de réagir rapidement aux problèmes et de ne pas perdre de temps de scraping.

Configuration des proxies dans les outils de scraping populaires

Examinons comment configurer des proxies dans les outils les plus populaires pour le scraping de job boards : Python (requests, Scrapy), Node.js (axios, Puppeteer) et des solutions prêtes à l'emploi.

Python : requests et Scrapy

Python est le langage le plus populaire pour le scraping grâce aux bibliothèques requests, BeautifulSoup et Scrapy.

Exemple avec la bibliothèque requests :

import requests
import random
import time

# Liste des proxies (obtenue auprès du fournisseur)
PROXIES = [
    'http://user:[email protected]:8080',
    'http://user:[email protected]:8080',
    'http://user:[email protected]:8080'
]

# Liste des User-Agent pour la rotation
USER_AGENTS = [
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
    'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36',
    'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36'
]

def parse_vacancy(url):
    proxy = random.choice(PROXIES)
    user_agent = random.choice(USER_AGENTS)
    
    headers = {
        'User-Agent': user_agent,
        'Accept': 'text/html,application/xhtml+xml',
        'Accept-Language': 'fr-FR,fr;q=0.9,en;q=0.8',
        'Accept-Encoding': 'gzip, deflate, br',
        'Connection': 'keep-alive'
    }
    
    proxies = {
        'http': proxy,
        'https': proxy
    }
    
    try:
        response = requests.get(
            url,
            headers=headers,
            proxies=proxies,
            timeout=30
        )
        
        if response.status_code == 200:
            return response.text
        elif response.status_code == 429:
            print(f'Limite de taux pour {proxy}, changement de proxy')
            # Supprimez temporairement le proxy de la liste
            return None
        else:
            print(f'Erreur {response.status_code}')
            return None
            
    except Exception as e:
        print(f'Erreur de requête : {e}')
        return None

# Utilisation
for i in range(100):
    html = parse_vacancy('https://hh.ru/vacancy/123456')
    if html:
        # Traitement des données
        pass
    
    # Délai aléatoire
    time.sleep(random.uniform(4, 8))

Exemple de configuration de Scrapy :

# settings.py

# Activation du support des proxies
DOWNLOADER_MIDDLEWARES = {
    'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110,
    'scrapy_rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
    'scrapy_rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

# Liste des proxies
ROTATING_PROXY_LIST = [
    'http://user:[email protected]:8080',
    'http://user:[email protected]:8080',
    'http://user:[email protected]:8080'
]

# Détection automatique des bans
ROTATING_PROXY_BAN_POLICY = 'scrapy_rotating_proxies.policy.BanDetectionPolicy'

# Délai entre les requêtes
DOWNLOAD_DELAY = 5
RANDOMIZE_DOWNLOAD_DELAY = True  # Délai aléatoire ±50%

# Rotation de l'User-Agent
DOWNLOADER_MIDDLEWARES.update({
    'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': None,
    'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400,
})

# Maximum de requêtes simultanées
CONCURRENT_REQUESTS = 4
CONCURRENT_REQUESTS_PER_DOMAIN = 1

Node.js : Puppeteer avec proxies

Pour le scraping de sites avec JavaScript (LinkedIn, Indeed), un navigateur headless est nécessaire. Puppeteer est la solution la plus populaire pour Node.js.

const puppeteer = require('puppeteer-extra');
const StealthPlugin = require('puppeteer-extra-plugin-stealth');

// Plugin pour contourner la détection du navigateur headless
puppeteer.use(StealthPlugin());

async function parseWithProxy() {
  const proxy = 'http://user:[email protected]:8080';
  
  const browser = await puppeteer.launch({
    headless: true,
    args: [
      `--proxy-server=${proxy}`,
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage',
      '--disable-blink-features=AutomationControlled'
    ]
  });
  
  const page = await browser.newPage();
  
  // Définir un User-Agent réel
  await page.setUserAgent(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
  );
  
  // Définir le reste de la logique ici...
```