Предисловие
В этой статье я, кратко, расскажу о тех возможностях Selenium, о которых не рассказал в предыдущих частях. Таких как:
- Ввод данных с клавиатуры
- Переключение на активное окно (пример: окно подтверждения обмена Steam)
- Выполнение JavaScript.
- Прокручивание страницы
Ввод данных с клавиатуры
Создайте новый Python скрипт, и перепишите туда следующий код.
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
def get_webdriver():
option = webdriver.FirefoxOptions()
option.set_preference('dom.webdriver.enabled',False)
binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe')
driver = webdriver.Firefox(options=option, firefox_binary=binary)
return driver
driver = get_webdriver()
driver.get('https://www.google.com/')
element = driver.find_element(By.CSS_SELECTOR,'input')
element.send_keys('tutorial')
element.submit()
Нас интересуют 2 последние строчки кода, т.к. остальное разбиралось в предыдущих статьях.
element.send_keys('tutorial')
Здесь, при помощи функции send_keys, вводится текст «tutorial» в элемент с тегом «input» (поле ввода).
element.submit()
После чего, нажимаем Enter
Таким образом, мы создали бота, который гуглит фразу tutorial.
Переключаемся на активное окно
Для переключения на активное окно, используется функция switch_to_window
driver.switch_to_window(driver.window_handles[-1])
Не знаю, зачем вам это может понадобится, но знание этой возможности, лишней точно не будет.
Выполнение javascript.
Для выполнения скриптов, используется функция execute_script(), которая принимает в качестве аргумента JS код. Вот пример работы скрипта.
from selenium import webdriver
def get_webdriver():
option = webdriver.FirefoxOptions()
option.set_preference('dom.webdriver.enabled',False)
binary = FirefoxBinary('C:/Program Files/Mozilla Firefox/firefox.exe')
driver = webdriver.Firefox(options=option, firefox_binary=binary)
return driver
driver = get_webdriver()
driver.get('https://under-prog.ru/')
driver.execute_script("alert('script working in selenium')")
В данном примере, мы выполнили простейший скрипт на сайте.
Прокручиваем страницу
Прокрутка страницы осуществляется за счет выполнения JS кода (как и на сайтах).
Для скролла, используется scrollTo.
window.scrollTo(x,y)
который принимает x, y координаты.
Если вам нужно прокрутить в самый низ, тогда используйте это:
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
document.body.scrollHeight возвращает, полный размер прокрутки.
Также, можно использовать плавную прокрутку, что-бы не вызывать подозрений у сайта.
driver.execute_script("window.scrollTo({ top: document.body.scrollHeight, left: 0, behavior: 'smooth'});")
Заключение.
Вот мы и закончили с Selenium, в следующей статье мы перейдем к лучшему, на мой взгляд, методу веб-скраппинга . Я говорю о связке reuqests+bs4, которая в отличии от Selenium:
- Значительно быстрее работает.
- Не требует веб драйвера (geckodriver.exe)
- Не требует предустановленного браузера (Firefox)
- Намного меньше потребляет оперативной памяти.
Однако:
- Данный способ работает не на всех сайтах (включен cloudflare или сложный JS).
- Написание скрипта занимает чуть больше времени.