Tous les spécialistes SEO impliqués dans le grattage de données savent que le CAPTCHA est une barrière difficile qui restreint l'accès aux informations nécessaires. Mais vaut-il la peine de l’éviter complètement, ou vaut-il mieux apprendre à le contourner ? Décrivons ce qu'est le CAPTCHA, pourquoi il est si largement utilisé et comment les spécialistes du référencement peuvent le contourner à l'aide d'exemples réels et de méthodes efficaces.
Tous les professionnels du référencement ont rencontré CAPTCHA. S'ils ne l'ont pas fait, soit ils ne sont pas des professionnels, soit ils comprennent mal l'acronyme SEO (peut-être en le confondant avec SMM ou CEO), soit ils ne font que commencer ce travail difficile.
CAPTCHA («Test de Turing public entièrement automatisé pour distinguer les ordinateurs et les humains») est un moyen de protéger un site contre les actions automatisées, comme le grattage de données ou les attaques de robots. CAPTCHA est traduit par « Полностью автоматизированный публичный тест Тьюринга для различения компьютеров и людей. »
On pourrait nier pendant des lustres que le CAPTCHA est surfait et affirmer qu'il ne vaut pas des ressources importantes. Mais de tels arguments s'effondrent au moment où vous devez récupérer des données à partir d'un moteur de recherche, tel que Yandex, sans aucune idée des requêtes XML... Ou, par exemple, si un client veut supprimer tout Amazon et paie bien... Non des questions se posent alors : « N’en dis pas plus… »
La situation n’est pas aussi simple qu’il y paraît. Protéger un site contre le grattage de données peut être difficile, surtout s'il s'agit d'un projet non commercial ou d'un « site hamster ». Souvent, on n’a ni le temps ni, surtout, l’envie d’allouer des ressources au CAPTCHA. Mais c’est une autre histoire si vous êtes propriétaire d’un portail majeur qui rapporte des millions. Il est alors logique d’envisager une protection à grande échelle, y compris des mesures visant à prévenir les attaques DDoS ou les concurrents malhonnêtes.
Par exemple, Amazon applique trois types de CAPTCHA, chacun apparaissant dans des situations différentes, et modifie la conception de manière aléatoire afin que les outils d'automatisation et les scrapers ne puissent pas s'appuyer sur des méthodes obsolètes. Cela rend le contournement de leur protection complexe et coûteux.
Si nous parlons de petits webmasters, ils comprennent également que des CAPTCHA complexes peuvent dissuader les vrais utilisateurs, surtout si les barrières sur le site sont trop élevées. Dans le même temps, laisser un site sans protection n'est pas judicieux : cela attirera même les robots les plus stupides, qui ne peuvent pas contourner le CAPTCHA mais peuvent toujours effectuer des actions de masse.
Les propriétaires de sites modernes tentent de trouver un équilibre en utilisant des solutions universelles, comme reCAPTCHA ou hCaptcha. Cela protège le site des simples robots sans causer de sérieux désagréments aux utilisateurs. Les CAPTCHA plus complexes ne sont utilisés que lorsque le site est confronté à une attaque massive de robots.
Considérons la question du point de vue du spécialiste SEO : pourquoi et dans quel but pourraient-ils avoir besoin de contourner le CAPTCHA ?
Le contournement du CAPTCHA peut être nécessaire pour la tâche la plus élémentaire : analyser les positions dans les moteurs de recherche. Bien sûr, cela est disponible via des services tiers qui facturent la surveillance quotidienne de la position. De plus, vous devrez également payer pour un service de reconnaissance CAPTCHA tiers.
CAPTCHA peut également être pertinent lors de recherches sur des sites concurrents. Contourner le CAPTCHA sur le site d'un concurrent est souvent plus facile que d'obtenir des classements de recherche car le niveau de protection diffère.
L'automatisation des tâches de routine est un sujet plus spécialisé. Tout le monde ne l'utilise pas, mais pour les spécialistes du référencement dédiés, cela peut être un outil précieux pour gagner du temps et des efforts.
En général, il est important de calculer la rentabilité : est-il moins coûteux de payer pour un service de surveillance de position et un service de reconnaissance CAPTCHA, ou de créer votre propre solution et de réduire les coûts ? Bien sûr, s’il ne s’agit que d’un ou deux projets et que le client paie, cette dernière option semble excessivement laborieuse. Mais si vous possédez plusieurs projets et que vous payez tout vous-même… Cela vaut la peine d’y réfléchir.
Explorons les méthodes qui nécessitent un peu plus d'efforts que le simple branchement d'une clé API dans Key Collector. Vous aurez besoin de connaissances plus approfondies que de savoir simplement comment trouver une clé API sur la page d'accueil du service et l'insérer dans le champ approprié.
La méthode la plus populaire consiste à envoyer CAPTCHA à un service spécialisé (tel que 2Captcha ou RuCaptcha), qui renvoie une solution prête. Ces services nécessitent un paiement par CAPTCHA résolu.
Voici un exemple de code standard pour résoudre reCAPTCHA V2 en Python :
import requests import time API_KEY = 'YOUR_2CAPTCHA_KEY' SITE_KEY = 'YOUR_SITE_KEY' PAGE_URL = 'https://example.com' def get_captcha_solution(): captcha_id_response = requests.post("http://2captcha.com/in.php", data={ 'key': API_KEY, 'method': 'userrecaptcha', 'googlekey': SITE_KEY, 'pageurl': PAGE_URL, 'json': 1 }).json() if captcha_id_response['status'] != 1: print(f"Error: {captcha_id_response['request']}") return None captcha_id = captcha_id_response['request'] print(f"CAPTCHA sent. ID: {captcha_id}") for attempt in range(30): time.sleep(5) result = requests.get("http://2captcha.com/res.php", params={ 'key': API_KEY, 'action': 'get', 'id': captcha_id, 'json': 1 }).json() if result['status'] == 1: print(f"CAPTCHA solved: {result['request']}") return result['request'] elif result['request'] == 'CAPCHA_NOT_READY': print(f"Waiting for solution... attempt {attempt + 1}/30") else: print(f"Error: {result['request']}") return None return None captcha_solution = get_captcha_solution() if captcha_solution: print('CAPTCHA solution:', captcha_solution) else: print('Solution failed.')
Ce code vous aide à soumettre automatiquement un CAPTCHA pour résolution et à recevoir le jeton nécessaire pour contourner la protection.
La deuxième méthode consiste à faire tourner les adresses IP à l'aide de proxys résidentiels. Cela vous permet d'accéder au site à partir de chaque nouveau proxy comme si vous étiez une personne différente, réduisant ainsi la probabilité d'activation de CAPTCHA.
Voici un exemple de code avec rotation de proxy en Python :
import requests from itertools import cycle import time import urllib.parse # List of proxies with individual logins and passwords proxies_list = [ {"proxy": "2captcha_proxy_1:port", "username": "user1", "password": "pass1"}, {"proxy": "2captcha_proxy_2:port", "username": "user2", "password": "pass2"}, {"proxy": "2captcha_proxy_3:port", "username": "user3", "password": "pass3"}, # Add more proxies as needed ] # Proxy rotation cycle proxy_pool = cycle(proxies_list) # Target URL to work with url = "https://example.com" # Headers to simulate a real user headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:129.0) Gecko/20100101 Firefox/129.0" } # Sending several requests with proxy rotation for i in range(5): # Specify the number of requests needed proxy_info = next(proxy_pool) proxy = proxy_info["proxy"] username = urllib.parse.quote(proxy_info["username"]) password = urllib.parse.quote(proxy_info["password"]) # Create a proxy with authorization proxy_with_auth = f"http://{username}:{password}@{proxy}" try: response = requests.get( url, headers=headers, proxies={"http": proxy_with_auth, "https": proxy_with_auth}, timeout=10 ) # Check response status if response.status_code == 200: print(f"Request {i + 1} via proxy {proxy} was successful.") else: print(f"Request {i + 1} ended with status code {response.status_code}") except requests.exceptions.RequestException as e: print(f"Error with proxy {proxy}: {e}") # Delay between requests for natural behavior time.sleep(2)
Cet exemple montre comment utiliser la rotation du proxy pour envoyer des requêtes au site cible, réduisant ainsi le risque d'être bloqué.
La troisième méthode consiste à utiliser des navigateurs sans tête comme Selenium pour simuler les actions réelles des utilisateurs. Cette approche peut nécessiter plus de main-d'œuvre, mais elle est également plus efficace.
Voici un exemple de code utilisant Selenium avec rotation de proxy :
import requests import time API_KEY = 'YOUR_2CAPTCHA_KEY' SITE_KEY = 'YOUR_SITE_KEY' PAGE_URL = 'https://example.com' def get_captcha_solution(): captcha_id_response = requests.post("http://2captcha.com/in.php", data={ 'key': API_KEY, 'method': 'userrecaptcha', 'googlekey': SITE_KEY, 'pageurl': PAGE_URL, 'json': 1 }).json() if captcha_id_response['status'] != 1: print(f"Error: {captcha_id_response['request']}") return None captcha_id = captcha_id_response['request'] print(f"CAPTCHA sent. ID: {captcha_id}") for attempt in range(30): time.sleep(5) result = requests.get("http://2captcha.com/res.php", params={ 'key': API_KEY, 'action': 'get', 'id': captcha_id, 'json': 1 }).json() if result['status'] == 1: print(f"CAPTCHA solved: {result['request']}") return result['request'] elif result['request'] == 'CAPCHA_NOT_READY': print(f"Waiting for solution... attempt {attempt + 1}/30") else: print(f"Error: {result['request']}") return None return None captcha_solution = get_captcha_solution() if captcha_solution: print('CAPTCHA solution:', captcha_solution) else: print('Solution failed.')
Cet exemple montre comment Selenium peut être utilisé pour simuler un utilisateur réel en faisant défiler et en interagissant avec les éléments du site.
En conclusion, si vous disposez d'un peu de temps et souhaitez travailler sur le code, combiner des méthodes telles que la rotation de proxy et les navigateurs sans tête peut donner d'excellents résultats. Si vous préférez simplifier les choses, utilisez des services qui fournissent des outils prêts à l'emploi pour cette tâche. Cependant, il est essentiel de sélectionner avec soin l’outil le plus approprié pour chaque tâche spécifique.
Je vous souhaite un accès sans CAPTCHA !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!