
Quand le crawler rencontre l'anti-crawler : la survie à toute épreuve des IP proxy
Les amis qui font des tests automatisés devraient comprendre que lorsqu'ils utilisent Selenium, ils ont surtout peur de rencontrer un blocage d'IP. C'est comme si on arrêtait un jeu dans une petite pièce noire, en regardant le programme bloqué dans l'interface CAPTCHA. À ce moment-là, le programme est bloqué dans l'interface CAPTCHA.IP proxyC'est l'armure de la résurrection, surtout avec des services comme ipipgo qui changent automatiquement d'IP, c'est comme une seconde vie pour les programmeurs.
Configuration pratique du plugin proxy de Selenium
Ne vous laissez pas tromper par ces documents officiels, il n'y a que deux étapes pour configurer le proxy dans la pratique :
from selenium import webdriver
proxy = "123.123.123.123:8888" C'est le proxy fourni par ipipgo.
options = webdriver.ChromeOptions()
options.add_argument(f'--proxy-server=http://{proxy}')
N'oubliez pas d'ajouter l'authentification du compte ipipgo (important !)
options.add_argument('--proxy-auth=username:password')
driver = webdriver.Chrome(options=options)
Attention ! Si vous utilisez le proxy dynamique d'ipipgo, n'oubliez pas de mettre à jour le pool d'adresses IP toutes les heures, sinon il sera facilement reconnu par le site web cible.
Technique de frappe de précision pour les sélecteurs CSS
Choisir des éléments, c'est comme jouer à un jeu de sniper, voici quelques éléments pour vous instruireun moyen infaillible de tuer: :
| prendre | cueilleur |
|---|---|
| Grab Login Button (bouton de connexion) | button.login-btn |
| Accès aux données sur les prix | div.price-box > span:first-child |
| Gestion de la charge dynamique | div.lazy-content:not(.loaded) |
Ne vous empressez pas de changer le code lorsque vous rencontrez un problème de localisation d'un élément. Essayez d'abord une nouvelle adresse IP avec ipipgo, car l'adresse IP est souvent masquée.
Guide pratique pour éviter la fosse
Récemment, alors que j'aidais un client à collecter des données sur le commerce électronique, j'ai découvert uneLes détails du diableCertains sites détectent les empreintes digitales des navigateurs. Ceci est nécessaire pour le moment :
- Changement de User-Agent à chaque démarrage
- Agent résidentiel en collaboration avec ipipgo (plus proche des utilisateurs réels)
- Intervalle de fonctionnement aléatoire (ne pas utiliser la mise en veille fixe !)
Donnez un exemple d'anti-détection :
import random
from selenium.webdriver.common.action_chains import ActionChain
Simuler un glissement humain
actions = ActionChain(driver)
actions.move_by_offset(
random.randint(10,50), random.randint(10,50), random.
random.randint(10,50), random.randint(10,50)
).perform()
Questions fréquemment posées Trousse de premiers secours
Q : Que dois-je faire si je ne parviens pas à me connecter à l'adresse IP du proxy ?
R : Vérifiez d'abord les paramètres de la liste blanche. La console d'ipipgo dispose de journaux de connexion en temps réel. Si la connexion est souvent interrompue, il est recommandé de passer à leur liste de contrôle.Utilisation exclusive des lignes à grande vitesse
Q : Les sélecteurs CSS échouent soudainement ?
R : 80% de la page web a été remaniée, utilisez les outils de développement pour vérifier la structure des éléments. Si l'élément lui-même existe mais ne peut être détecté, il se peut que l'IP soit bloquée - dépêchez-vous d'ajouter un logiciel intermédiaire de remplacement automatique de l'IP d'ipipgo dans le code !
Q : Comment puis-je éviter d'être reconnu comme un robot ?
R : Trois règles d'or : ① Utiliser le système ipipgo'sIP résidentielle dynamique ②Randomiser l'intervalle d'opération ③Vider régulièrement le cache du navigateur
Ajouter une armure de résurrection au code.
Enfin, je partage un modèle de code qui préserve la vie et qui s'intègre à la fonction de changement automatique d'IP d'ipipgo :
from ipipgo_api import get_new_proxy ipipipgo official SDK
def safe_visit(url) :
for _ in range(3) : retry 3 times
try.
proxy = get_new_proxy(type='https')
driver = init_browser(proxy)
driver.get(url)
Déroulement normal de l'opération...
break
except Exception as e.
driver.quit()
mark_bad_proxy(proxy) Problème de retour d'information de l'IP à l'ipipgo
def init_browser(proxy).
Ici, nous insérons le code de configuration du proxy précédent
return driver
Cette solution permet d'augmenter le taux de réussite de la collecte de 53% à 98%.QCI, ce qui permet de filtrer automatiquement les nœuds défaillants.

