Saltar al contenido

¿Cómo puedo hacer que un script de Selenium sea indetectable usando GeckoDriver y Firefox a través de Python?

Al fin luego de mucho trabajar ya dimos con la contestación de esta duda que tantos usuarios de este espacio presentan. Si tienes alguna información que compartir puedes dejar tu conocimiento.

Solución:

Existen diferentes métodos para evitar que los sitios web detecten el uso de Selenium.

  1. El valor de navigator.webdriver se establece en true por defecto cuando se usa Selenium. Esta variable estará presente tanto en Chrome como en Firefox. Esta variable debe establecerse en “indefinido” para evitar la detección.

  2. También se puede utilizar un servidor proxy para evitar la detección.

  3. Algunos sitios web pueden usar el estado de su navegador para determinar si está usando Selenium. Puede configurar Selenium para que use un perfil de navegador personalizado para evitar esto.

El siguiente código utiliza estos tres enfoques.

profile = webdriver.FirefoxProfile('C:\Users\You\AppData\Roaming\Mozilla\Firefox\Profiles\something.default-release')

PROXY_HOST = "12.12.12.123"
PROXY_PORT = "1234"
profile.set_preference("network.proxy.type", 1)
profile.set_preference("network.proxy.http", PROXY_HOST)
profile.set_preference("network.proxy.http_port", int(PROXY_PORT))
profile.set_preference("dom.webdriver.enabled", False)
profile.set_preference('useAutomationExtension', False)
profile.update_preferences()
desired = DesiredCapabilities.FIREFOX

driver = webdriver.Firefox(firefox_profile=profile, desired_capabilities=desired)

Una vez que se ejecuta el código, podrá verificar manualmente que el navegador ejecutado por Selenium ahora tiene su historial y extensiones de Firefox. También puede escribir “navigator.webdriver” en la consola de devtools para verificar que no esté definido.

El hecho de que impulsado por selenio Firefox / Conductor Gecko se detecta no depende de ningun especifico Conductor Gecko o Firefox versión. los sitios web ellos mismos pueden detectar el tráfico de la red y pueden identificar el Cliente del navegador es decir Navegador web como WebDriver controlado.

Según la documentación del WebDriver Interface en el último borrador del editor de WebDriver – Documento vivo del W3C la webdriver-activebandera que inicialmente se establece como falsese establece en true cuando el agente de usuario está bajo control remoto, es decir, cuando se controla a través de Selenium.

NavegadorAutomatizaciónInformación

Ahora que el NavigatorAutomationInformation la interfaz no debe estar expuesta en WorkerNavigator.

mixin NavigatorAutomatizaciónInformación

Asi que,

webdriver
    Returns true if webdriver-active flag is set, false otherwise.

mientras,

navigator.webdriver
    Defines a standard way for co-operating user agents to inform the document that it is controlled by WebDriver, for example so that alternate code paths can be triggered during automation.

Entonces, la conclusión es:

Selenium se identifica a sí mismo


Sin embargo, algunos enfoques genéricos para evitar ser detectado durante el web-scraping son los siguientes:

  • Lo primero y más importante attribute un sitio web puede determinar que su script/programa es a través de su tamaño del monitor. por lo que se recomienda no para utilizar el Viewport convencional.
  • Si necesita enviar varias solicitudes a un sitio web, debe seguir cambiando el Agente de usuario en cada solicitud. Aquí puede encontrar una discusión detallada sobre ¿Cómo cambiar el agente de usuario de Google Chrome en Selenium?
  • Para simular humano como comportamiento que puede necesitar para ralentizar la ejecución del script incluso más allá de WebDriverWait y las condiciones esperadas que inducen time.sleep(secs). Aquí puede encontrar una discusión detallada sobre cómo dormir webdriver en python por milisegundos

Recuerda algo, que te brindamos la opción de añadir un criterio correcto si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *