
Кастомный Selenium Chromedriver | Zero-Config | Проходит ВСЕ системы защиты от ботов (такие как Distil / Imperva / Datadadome / CloudFlare IUAM)
https://github.com/ultrafunkamsterdam/undetected-chromedriver
Оптимизированный патч Selenium Chromedriver, который не вызывает срабатывание анти-бот сервисов, таких как Distill Network / Imperva / DataDome / Botprotect.io Автоматически загружает бинарный файл драйвера и патчит его.
pip install undetected-chromedriver
или , если вам не терпится приключений, установите напрямую через github```
pip install git+https://www.github.com/ultrafunkamsterdam/undetected-chromedriver@master # replace @master with @branchname for other branches
Я введу ограничения на трекере задач. Им слишком долго злоупотребляли.
есть хорошие новости?
Да, я открыл Undetected-Discussions что, думаю, поможет нам в долгосрочной перспективе.
ЭТОТ ПАКЕТ НЕ СКРЫВАЕТ, и я повторяю, НЕ СКРЫВАЕТ ваш IP-адрес, поэтому при запуске из дата-центра (даже небольшого) высока вероятность, что вы не пройдете! Кроме того, если репутация вашего IP дома низкая, вы тоже не пройдете!
Запуск следующего кода из дома и из дата-центра.```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 вызвал некоторые проблемы. 3.5.0 совместим и закреплён на selenium 4.9 или выше. Я больше не могу поддерживать <4.9.
- Удалены некоторые kwargs из конструктора: service_args, service_creationflags, service_log_path.
- добавлена функция-генератор find_elements_recursive. Это скорее удобная функция, так как многие сайты, похоже, отдают разный контент из разных фреймов, что затрудняет
использование find_elements
## 3.4.5 ##
- Какая неделя. Последние достижения в алгоритмах обнаружения автоматизации победили меня (как я думал) в 3.4.0, но, видимо, на некоторых ОС это вызывало ошибку при взаимодействии с элементами. Пришлось откатиться и использовать другой метод, исправить баги, и в итоге всё же удалось придерживаться первоначальной идеи (+ исправление багов)
- Обновление до chrome 110 преподнесло ещё один сюрприз, на этот раз для пользователей HEADLESS.
- хотя headless официально не поддерживается, я всё равно пропатчил его!
- рад сообщить, что ТЕПЕРЬ ОН ТОЖЕ НЕ ОБНАРУЖИВАЕТСЯ (но всё ещё не поддерживается ;))
- особая благодарность [@mdmintz](https://github.com/mdmintz) и [@abdulzain6](https://github.com/abdulzain6)
- также особая благодарность [@sebdelsol](https://github.com/sebdelsol) за его совершенно добровольную помощь в разделе issues, ты, должно быть, сумасшедший :)
### 3.4.0 ###
**Большое обновление! будьте осторожны, так как оно -потенциально- может сломать ваш код.**
* переписан механизм анти-обнаружения: вместо удаления и переименования переменных мы просто сохраняем их, но предотвращаем их внедрение с самого начала. Это защитит нас от обнаружения по крайней мере в ближайшем будущем.
* переписано именование файлов, чтобы в итоге не получать 1000 файлов {randomstring}_chromedriver.exe; вместо этого он просто называется undetected_chromedriver.exe
* очистка: удалены файлы compat, v2 и папка tests
### 3.2.0 ###
* добавлен пример, содержащий типичный код webdriver, ответы на часто задаваемые вопросы, подводные камни + демонстрацию некоторых трюков, позволяющих избавиться
от необходимости многопоточности.
### [>>>> пример кода здесь <<<<](https://github.com/ultrafunkamsterdam/undetected-chromedriver/blob/master/example/example.py)
* добавлен метод WebElement.click_safe(), который можно попробовать, если вас обнаружили после клика по ссылке. Нет гарантии, что это сработает.
* добавлен WebElement.children(self, tag=None, recursive=False)
для простого получения/поиска дочерних узлов. пример:
```
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))
```
* добавлен example.py, на который я могу указывать людям, когда они задают глупые вопросы
(нет, на самом деле он довольно классный, все должны его увидеть)
* добавлена поддержка платформы lambda
* добавлена поддержка x86_32
* добавлена поддержка систем, определяемых как linux2
* некоторый рефакторинг
### 3.1.6 ###
### всё ещё отлично держится ###
- use_subprocess теперь по умолчанию равен True. Слишком многие не понимают multiprocessing и __name__ == '__main__', а после тестирования, похоже,
в chrome 104+ это уже не имеет значения.
- добавлен no_sandbox, который по умолчанию равен True, и при этом без надоедливой панели "вы используете небезопасную командную строку ...".
- обновлён [образ Docker](https://hub.docker.com/r/ultrafunk/undetected-chromedriver). Теперь вы можете подключиться по vnc или rdp к своему контейнеру, чтобы увидеть
реальное окно браузера
[](https://i.imgur.com/W7vriN9.mp4)
- конечно, "обычный" режим тоже работает
[](https://i.imgur.com/2qSNyuK.mp4)
### 3.1.0 ###
**эта версия `might` сломать ваш код, тестируйте перед обновлением!**
- **добавлена новая логика анти-обнаружения!**
- v2 стал основным модулем, поэтому ссылки на v2 больше не нужны. Это означает, что теперь можно просто использовать: ```python
import undetected_chromedriver as uc
driver = uc.Chrome()
driver.get('https://nowsecure.nl')
для обратной совместимости v2 не удалён, а переадресован на основной модуль.
Исправлено назойливое «окно приветствия» на ОС, отличных от Windows. Для тех любителей назойливых окон, кто ❤ кормить Google ещё большим количеством данных, используйте Chrome(suppress_welcome=False).
executable_path в конструкторе заменён на browser_executable_path
который не следует использовать, если только вы не тот пограничный случай (да, именно вы), кто не может добавить свою папку установки Chrome в переменную окружения PATH,
или у вас армия разных браузеров/версий и автоматический поиск возвращает не тот браузер
«v1» (?) пока перемещён в _compat.
исправлены версии зависимостей