модуль selenium python
Установка
pip install selenium
Драйвера
Дравера это приложения которые непосредственно управляют браузером.
Браузер | Ссылка для скачивания драйвера |
---|---|
Chrome: | https://chromedriver.chromium.org/downloads |
Edge: | https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/ |
Firefox: | https://github.com/mozilla/geckodriver/releases |
Safari: | https://webkit.org/blog/6900/webdriver-support-in-safari-10/ |
Использование браузеров
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
Chrome
Тут можно скачать chrome для тестирования ее можно испльзвать локально.
Свободный браузер Chromium можно скачать тут или его варианты
Создание драйвера
from selenium.webdriver.chrome.service import Service as ChromeService
options = Options()
options.binary_location = "/home/path_to_local_chrome/chrome"
options.add_experimental_option("detach", True) # Если нужно, чтобы браузер на закрывался после выполнения скрипта
chromedriver = "/home/path_to_local_chromedriver/chromedriver"
service = ChromeService(executable_path=chromedriver)
driver = webdriver.Chrome(options=options, service=service)
Firefox
Создание драйвера
firefox_options = webdriver.FirefoxOptions()
firefox_options.add_argument("--private")
driver = webdriver.Firefox(options=firefox_options)
Обнаружение автоматизаци
По умолчанию сайт понимает когда не него заходит браузер с плагином автоматизации, или если запросы идут с браузера в headless "скрытом" режиме. Пример как происходит Обнаружение Chrome headless режима бразуера.
- Посмотреть свой
fingetprint
- Тест на бота antoinevastel.com
- еще тест на бота bot.sannysoft.com
- Проверить свой IP адрес на присутствие в черных списках
В некоторых случаях полезно препятствовать обнаружению.
Стандартный selenium
Можно попробовать изменить конфиги используя стандартный модуль selenuim
from selenium.webdriver.chrome.options import Options
options = Options()
options.add_argument('--disable-blink-features=AutomationControlled')
options.add_experimental_option('useAutomationExtension', False) # Turn-off useAutomationExtension
options.add_experimental_option("excludeSwitches", ["enable-automation"]) # Exclude the collection of enable-automation switches
driver = webdriver.Chrome(options=options)
driver.execute_script("Object.defineProperty(navigator, 'webdriver', {get: () => undefined})")
driver.execute_cdp_cmd('Network.setUserAgentOverride', {"userAgent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.53 Safari/537.36'})
print(driver.execute_script("return navigator.userAgent;"))
- Ответ на stackoverflow с решением этой проблемы.
- Как определяется selenium ответ на stackoverflow.com
Сторонние сборки
Еще вариантом могут быть уже пропатченые драйвера. Например
- Репозиторий selenium-stealth
- Так же будет полезна репа Selenium-Profiles
Links
Официальные ссылки
Home: | https://selenium.dev |
Docs: | selenium package API |
Dev: | https://github.com/SeleniumHQ/Selenium |
PyPI: | https://pypi.org/project/selenium/ |
IRC: | #selenium channel on LiberaChat |
Docs: | selenium-python.readthedocs.io - Неплохой док от индуса |