Maison >Java >javaDidacticiel >Comment puis-je empêcher la détection du sélénium en modifiant l'indicateur Navigator.webdriver ?

Comment puis-je empêcher la détection du sélénium en modifiant l'indicateur Navigator.webdriver ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-24 06:35:25688parcourir

How Can I Prevent Selenium Detection by Modifying the Navigator.webdriver Flag?

Modification de l'indicateur Navigator.webdriver pour empêcher la détection du sélénium

La détection du sélénium pose un défi important lors de l'automatisation des fonctionnalités banales d'un site Web via Selenium et Chrome. Certains sites Web recherchent activement les navigateurs pilotés par Selenium, empêchant ainsi certaines requêtes. Souvent, ils s'appuient sur des variables DOM exposées, comme navigator.webdriver, pour détecter de tels cas.

Approche de prévention

Pour contrecarrer ce mécanisme de détection, envisagez d'adopter les mesures préventives suivantes :

Ajouter des indicateurs de ligne de commande

Modifiez votre script Selenium pour injecter les arguments spécifiques dans l'instance Chrome. Cela inclut :

  • Désactivation de l'indicateur « AutomationControlled » :

    from selenium import webdriver
    
    options = webdriver.ChromeOptions()
    options.add_argument('--disable-blink-features=AutomationControlled')
    driver = webdriver.Chrome(options=options, executable_path=path_to_driver)
  • Définition d'un agent utilisateur personnalisé :

    driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Your_Custom_User_Agent'})

Dans le script Modifications

  • Définissez navigator.webdriver sur non défini :

    driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
  • Exclure les commutateurs d'automatisation :

    options.add_experimental_option("excludeSwitches", ["enable-automation"])
  • Désactiver l'automatisation extension :

    options.add_experimental_option('useAutomationExtension', False)

Exemple de code

En combinant ces mesures, voici un extrait de code complet :

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("start-maximized")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)

driver = webdriver.Chrome(options=options, executable_path=path_to_driver)
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Your_Custom_User_Agent'})
print(driver.execute_script("return navigator.userAgent;"))
driver.get('https://www.httpbin.org/headers')

Mises en garde

Soyez prudent car ces modifications peuvent interférer avec la navigation et potentiellement conduire à une détection.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn