
Chromedriver personalizado para Selenium | Cero configuración | Supera TODOS los sistemas de mitigación de bots (como Distil / Imperva / Datadadome / CloudFlare IUAM)
https://github.com/ultrafunkamsterdam/undetected-chromedriver
Parche optimizado de Selenium Chromedriver que no activa servicios antibot como Distill Network / Imperva / DataDome / Botprotect.io Descarga automáticamente el binario del driver y lo parchea.
pip install undetected-chromedriver
o , si te sientes aventurero, instala directamente vía github```
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
Pondré límites en el rastreador de incidencias. Ha sido abusado durante demasiado tiempo.
¿alguna buena noticia?
Sí, he abierto Undetected-Discussions, que creo que nos ayudará mejor a largo plazo.
ESTE PAQUETE NO OCULTA, y repito NO OCULTA tu dirección IP, así que al ejecutarlo desde un centro de datos (incluso los más pequeños), es muy probable que no pases. Además, si tu reputación IP en casa es baja, ¡no pasarás!
Ejecutando el siguiente código desde casa, y desde un centro de datos.```python import undetected_chromedriver as uc driver = uc.Chrome(headless=True,use_subprocess=False) driver.get('https://nowsecure.nl') driver.save_screenshot('nowsecure.png')
<div style="display:flex;flex-direction:row">
<img src="https://assets.kitploit.com/production/public/readmes/50956/c1bde1e3621f106c2504cf4ecb9cc9015b23340c7a9bd5f20364c27016b2dd40/4f02747809c3b183c8af8238f6858540057402adfe0f26d4fa9d646091fa5781-display-v1.webp" width="720"/>
<img src="https://assets.kitploit.com/production/public/readmes/50956/ac44f4c3d408a07f4a0b96b2eb37ecc58f3a9711f32b31a642c27e96ad2ab767/c94f4da9c540b7890c9350605f085bddc730ed40073c886ff94a2475bdfe806a-display-v1.webp" width="720"/>
</div>
<!--  -->
<!--  -->
## 3.5.0 ##
- selenium 4.10 causó algunos problemas. 3.5.0 es compatible y tiene selenium 4.9 o superior fijado. Ya no puedo dar soporte a <4.9.
- Se eliminaron algunos kwargs del constructor: service_args, service_creationflags, service_log_path.
- Se añadió la función generadora find_elements_recursive, que es más una función de conveniencia, ya que muchos sitios web parecen servir contenido diferente desde distintos frames, lo que dificulta
el uso de find_elements
## 3.4.5 ##
- Vaya semana. Los recientes avances en los algoritmos de detección de automatización me habían vencido (eso creía) con 3.4.0, pero al parecer, en algunos sistemas operativos esto causaba un error al interactuar con los elementos. Tuve que revertir usando un método diferente, corregir errores, y finalmente pude mantener la idea inicial (+ corrigiendo errores).
- La actualización a Chrome 110 trajo otra sorpresa, esta vez para los usuarios de HEADLESS.
- aunque headless no tiene soporte oficial, ¡lo parcheé!
- me alegra anunciar que AHORA TAMBIÉN ES INDETECTADO (pero sigue sin soporte ;))
- agradecimientos especiales a [@mdmintz](https://github.com/mdmintz) y [@abdulzain6](https://github.com/abdulzain6)
- también agradecimientos especiales a [@sebdelsol](https://github.com/sebdelsol) por su ayuda en la sección de issues de forma totalmente voluntaria, debes estar loco :)
### 3.4.0 ###
**¡Gran actualización! ten cuidado, ya que -potencialmente- podría romper tu código.**
* Se reescribió el mecanismo anti-detección: en lugar de eliminar y renombrar variables, simplemente las mantenemos, pero evitamos que se inyecten en primer lugar. Esto nos mantendrá a salvo de la detección al menos en el futuro cercano.
* Se reescribió el nombre de los archivos para evitar terminar con 1000 archivos {randomstring}_chromedriver.exe; ahora simplemente se llama undetected_chromedriver.exe.
* Limpieza: se eliminaron los archivos compat, v2 y la carpeta de tests.
### 3.2.0 ###
* Se añadió un ejemplo que contiene código típico de webdriver, respuestas a preguntas frecuentes, dificultades comunes + se muestran algunos trucos para eliminar
la necesidad de usar multithreading.
### [>>>> código de ejemplo aquí <<<<](https://github.com/ultrafunkamsterdam/undetected-chromedriver/blob/master/example/example.py)
* Se añadió el método WebElement.click_safe(), que puedes probar si te detectan después de hacer clic en un enlace. No se garantiza que funcione.
* Se añadió WebElement.children(self, tag=None, recursive=False)
para obtener/encontrar fácilmente nodos hijos. Ejemplo:
```
body = driver.find_element('tag name', 'body')
# get the 6th child (any tag) of body, and grab all img's within (recursive).
images = body.children()[6].children('img', True)
srcs = list(map(lambda _:_.attrs.get('src'), images))
```
* Se añadió example.py al que puedo remitir a la gente cuando hace preguntas tontas
(no, en realidad es bastante bueno, todos deberían verlo)
* Se añadió soporte para la plataforma lambda
* Se añadió soporte para x86_32
* Se añadió soporte para sistemas que se reportan como linux2
* algo de refactorización
### 3.1.6 ###
### Sigue pasando fuerte ###
- use_subprocess ahora se establece por defecto a True. Demasiada gente no entiende multiprocessing y __name__ == '__main__', y tras probarlo,
parece que ya no supone ninguna diferencia en Chrome 104+
- Se añadió no_sandbox, que se establece por defecto a True, y esto sin la molesta barra de "estás usando una línea de comandos no segura ...".
- actualiza la [imagen de Docker](https://hub.docker.com/r/ultrafunk/undetected-chromedriver). Ahora puedes conectarte por vnc o rdp a tu contenedor para ver
la ventana real del navegador
[](https://i.imgur.com/W7vriN9.mp4)
- por supuesto, el modo "normal" también funciona
[](https://i.imgur.com/2qSNyuK.mp4)
### 3.1.0 ###
**esta versión `podría` romper tu código, ¡prueba antes de actualizar!**
- **¡Se añadió nueva lógica anti-detección!**
- v2 se ha convertido en el módulo principal, así que ya no necesitas referencias a v2. Esto significa que ahora puedes simplemente usar: ```python
import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get('https://nowsecure.nl')
por compatibilidad hacia atrás, v2 no se elimina, sino que se convierte en un alias del módulo principal.