J'ai testé Selenium avec Chromedriver et j'ai remarqué que certaines pages peuvent détecter que vous utilisez Selenium même s'il n'y a pas d'automatisation du tout. Même lorsque je ne fais que naviguer manuellement en utilisant Chrome via Selenium et Xephyr, j'obtiens souvent une page indiquant qu'une activité suspecte a été détectée. J'ai vérifié mon agent utilisateur et l'empreinte digitale de mon navigateur, et ils sont tous exactement identiques à ceux du navigateur chrome normal.
Lorsque je navigue sur ces sites en chrome normal, tout fonctionne bien, mais dès que j'utilise Selenium, je suis détecté.
En théorie, chromedriver et chrome devraient avoir exactement la même apparence pour n'importe quel serveur web, mais d'une manière ou d'une autre, ils peuvent le détecter.
Si vous voulez un code de test, essayez ceci :
from pyvirtualdisplay import Display
from selenium import webdriver
display = Display(visible=1, size=(1600, 902))
display.start()
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--disable-extensions')
chrome_options.add_argument('--profile-directory=Default')
chrome_options.add_argument("--incognito")
chrome_options.add_argument("--disable-plugins-discovery");
chrome_options.add_argument("--start-maximized")
driver = webdriver.Chrome(chrome_options=chrome_options)
driver.delete_all_cookies()
driver.set_window_size(800,800)
driver.set_window_position(0,0)
print 'arguments done'
driver.get('http://stubhub.com')
Si vous vous promenez sur stubhub, vous serez redirigé et "bloqué" en une ou deux demandes. J'ai enquêté sur ce problème et je n'arrive pas à comprendre comment ils peuvent savoir qu'un utilisateur utilise Selenium.
Comment font-ils ?
EDIT UPDATE :
J'ai installé le plugin Selenium IDE dans Firefox et j'ai été banni lorsque je suis allé sur stubhub.com dans le navigateur normal de Firefox avec seulement le plugin supplémentaire.
EDIT :
Lorsque j'utilise Fiddler pour visualiser les requêtes HTTP envoyées dans les deux sens, j'ai remarqué que les requêtes du "faux navigateur" ont souvent "no-cache" dans l'en-tête de réponse.
EDIT :
les résultats sont les suivants Existe-t-il un moyen de détecter que je suis dans une page Selenium Webdriver à partir de Javascript ? suggère qu'il ne devrait pas y avoir de moyen de détecter si vous utilisez un webdriver. Mais cette preuve suggère le contraire.
EDIT :
Le site télécharge une empreinte digitale sur leurs serveurs, mais j'ai vérifié et l'empreinte digitale de selenium est identique à l'empreinte digitale en utilisant chrome.
EDIT :
C'est une des charges utiles d'empreintes digitales qu'ils envoient à leurs serveurs.
{"appName":"Netscape","platform":"Linuxx86_64","cookies":1,"syslang":"en-US","userlang":"en-US","cpu":"","productSub":"20030107","setTimeout":1,"setInterval":1,"plugins":{"0":"ChromePDFViewer","1":"ShockwaveFlash","2":"WidevineContentDecryptionModule","3":"NativeClient","4":"ChromePDFViewer"},"mimeTypes":{"0":"application/pdf","1":"ShockwaveFlashapplication/x-shockwave-flash","2":"FutureSplashPlayerapplication/futuresplash","3":"WidevineContentDecryptionModuleapplication/x-ppapi-widevine-cdm","4":"NativeClientExecutableapplication/x-nacl","5":"PortableNativeClientExecutableapplication/x-pnacl","6":"PortableDocumentFormatapplication/x-google-chrome-pdf"},"screen":{"width":1600,"height":900,"colorDepth":24},"fonts":{"0":"monospace","1":"DejaVuSerif","2":"Georgia","3":"DejaVuSans","4":"TrebuchetMS","5":"Verdana","6":"AndaleMono","7":"DejaVuSansMono","8":"LiberationMono","9":"NimbusMonoL","10":"CourierNew","11":"Courier"}}
Il est identique en sélénium et en chrome
EDIT :
Les VPN fonctionnent pour une seule utilisation mais sont détectés dès que je charge la première page. Il est clair qu'un javascript est exécuté pour détecter Selenium.
0 votes
Je vous suggère d'utiliser un proxy local pour jeter un coup d'oeil au trafic web allant de votre requête au serveur et inversement. Vous devriez être capable de le dire à partir de là. fiddler, burp, ZED proxy, n'importe lequel d'entre eux fera l'affaire. Je préfère Burp
0 votes
Je l'ai fait et il n'y a aucune différence entre les demandes. Comment peuvent-ils faire ça ?
6 votes
@RyanWeinstein : Ce n'est pas le trafic. Ma supposition est que Selenium doit exposer certains crochets JavaScript qui peuvent être détectés sur le JavaScript côté client.
7 votes
Ou si c'est le trafic, alors c'est un modèle de trafic.... vous parcourez les pages trop rapidement.
8 votes
Je ne navigue pas trop vite. Je ne charge qu'une seule page et je navigue normalement à l'aide de ma souris et de mon clavier. De plus, cela n'a pas de sens que Selenium ait besoin d'exposer des hooks, car il exécute littéralement chrome.exe. Il exécute simplement le chrome normal et vous permet d'obtenir des données à partir de celui-ci. Avez-vous d'autres idées ? Je pensais que cela avait peut-être quelque chose à voir avec les cookies. Cela me rend fou.
1 votes
L'idée de Mikko me semble assez plausible. Selenium doit être capable de détecter des événements pour pouvoir y répondre. Il doit donc injecter du code javascript qui est détecté même si vous n'êtes pas en train d'automatiser quoi que ce soit.
3 votes
C'est possible, mais si c'est le cas, cela irait à l'encontre de tout ce que l'on sait sur Selenium. Il n'y a nulle part en ligne où quelqu'un connaît un moyen de détecter si un utilisateur utilise Chromedriver. Donc s'il y a un moyen de le détecter en utilisant le javascript frontal, je veux savoir ce que c'est. stackoverflow.com/questions/3614472/
0 votes
Pouvez-vous afficher les en-têtes de la requête (sauf les informations sensibles, bien sûr) ? C'en est une... Il y a aussi probablement une interaction de l'utilisateur que le site attend et qui ne se produit pas.
8 votes
Ce site utilise
distill
la technologie de détection des robots et diffuse le contenu en utilisantakamaitechnologies.com
CDN à partir de différentes adresses IP, par exemple.95.100.59.245
,104.70.243.66
,23.202.161.241
1 votes
Il en va de même pour 411.com
0 votes
Je suis capable d'atteindre stubhub.com et 411.com avec chromedriver/selenium et les paramètres que vous avez indiqués. D'après ce que SIslam a lu sur Distil, il semble qu'ils gardent une empreinte en mémoire, qui est probablement déclenchée en fonction du comportement.
1 votes
L'empreinte digitale contient surtout des informations sur le navigateur. Vous dites que vous êtes capable d'aller sur stubhub et de naviguer dans chromedriver ? Etes-vous sûr que vous utilisez exactement mes paramètres ? Je ne peux pas naviguer avec Chromedriver, il doit donc y avoir une différence. @ryanmc
6 votes
Je rencontre le même problème avec Selenium et le pilote firefox. Ce qui est intéressant à noter, c'est que j'exécute Selenium dans une machine virtuelle VMWare Workstation qui accède à Internet via un NAT. La machine hôte est capable d'accéder à stubhub, alors que la VM est incapable d'y accéder lorsqu'elle utilise Selenium, ou même l'instance de navigateur lancée par Selenium. J'ai fait bloquer l'instance de navigateur de la VM et stubhub reconnaît toujours la machine et la bloque. Il doit donc effectuer une empreinte digitale du navigateur et de la machine d'une certaine manière.
1 votes
@RyanWeinstein Oui, fp est généré à partir d'environ 40 variables qui englobent les informations sur le client et le réseau ! Ce que j'ai lu dans distill !
1 votes
Sans utiliser pyvirtualdisplay, je peux me connecter à stubhub.com et naviguer sans problème ; je ne suis pas bloqué.
0 votes
@cwa : Pouvez-vous poster votre code ? Personne d'autre ici ne semble avoir réussi à le faire fonctionner.
2 votes
Avez-vous essayé de vous connecter via le débogage à distance au lieu de démarrer une nouvelle instance ? sites.google.com/a/chromium.org/chromedriver/help/ Le webdriver sera invisible pour le site web.
0 votes
Dans mon cas, cela fonctionne. Je peux ouvrir stubhub.com avec Selenium et naviguer dans les éléments plus tard.