Python. Заключение Selenium (WebScrapping) [4]

Предисловие

В этой статье я, кратко, расскажу о тех возможностях 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).
  • Написание скрипта занимает чуть больше времени.

Итоговый результат.

Пожалуйста отключи блокировщик рекламы, или внеси сайт в белый список!

Please disable your adblocker or whitelist this site!