Selenium - эмуляция действий в браузере

Selenium - эмуляция действий в браузере

В предыдущих статьях я писал о том, как парсить различные сайты с помощью библиотек requests и beautiful soup. Но иногда нам нужно не просто спарсить сайт, а эмулировать действия пользователя на нём - нажимать на какие-то ссылки, проходить авторизацию, заполнять формы. В этом случае нам пригодится модуль Selenium. Сперва установим сам модуль: pip install selenium Кроме того, нам понадобится заранее установленный браузер Mozilla Firefox и специальная программа-драйвер для Firefox. Этот драйвер доступен как для Windows, так и для Linux. Драйвер нужно скачать и кинуть в папку с вашим скриптом, в котором вы собираетесь использовать Selenium. Скачать драйвер можно здесь После того как вы установили Selenium, и скачали драйвер в папку, где будет ваш скрипт, можно начинать писать программу. Сперва давайте просто откроем какой-либо сайт в Firefox через драйвер Selenium

from selenium import webdriver
browser=webdriver.Firefox()
browser.get('http://pythono.ru')
После запуска данного кода, откроется браузер с нашим сайтом. Теперь рассмотрим случай, когда нам нужно кликнуть по какому-то элементу на сайте. Чтобы это сделать, сперва нужно каким-то образом получить в переменную указатель на тот объект на сайте, с которым мы хотим работать. Это можно сделать с помощью нескольких команд:
a = browser.find_element_by_css_selector('input[type="submit"]')
amassiv = browser.find_elements_by_css_selector('input[type="submit"]')
b = browser.find_element_by_id('login')
bmassiv = browser.find_elements_by_id('login')
c = browser.find_element_by_class('menu')
cmassiv = browser.find_elements_by_class('menu')
Мы можем получить первый встретившийся элемент по указанному классу, id или css-селектору. Также мы можем получить список всех элементов с указанным id, class или css-селектором. После того, как указатель на нужный элемент сайта получен, можно кликнуть по нему командой:
a.click()
Теперь рассмотрим как заполнить форму для отправки каких-либо данных. Например, представим, что на нашей странице сайта есть всего одна форма, в которой два поля с id равными login и password.
login = browser.find_element_by_id('login')
login.send_keys('ivan')
passwd = browser.find_element_by_id('password')
passwd.send_keys('yourpassword')
k=browser.find_element_by_css_selector('input[type="submit"]')
k.click()
Здесь мы получаем указатель по id на каждое из полей, командой send_keys('строка') заполняем нужной строкой текущее поле, и после кликаем по указателю который определяет кнопку submit. В итоге форма заполняется логином-паролем, нажимается кнопка отправки формы, и происходит авторизация на каком-либо сайте. Я взял указатель на кнопку отправки в виде k=browser.find_element_by_css_selector('input[type="submit"]'), но, если у вас на странице больше чем одна форма, или используется AJAX, лучше получить указатель на кнопку отправки по её id. Точно также можно заполнять любые формы вашими сообщениями в автоматическом режиме, и отправлять их, кликая по кнопкам отправки. Кликая по ссылкам, можно перемещаться по сайту, и парсить даже сложные JS сайты. Сам парсинг происходит следующим образом. Сперва как обычно, мы получаем указатель на какой-то элемент страницы - например напечатаем текст из всех div с классом mytext.
cmassiv = browser.find_elements_by_class('mytext')
for x in cmassiv:
    print(x.text)
Или спарсим все ссылки с классом mylink.
bmassiv = browser.find_elements_by_class('mylink')
for x in bmassiv:
    print(x.get_attribute('href'))
Как видно, с помощью Selenium можно не только парсить сайты, но и переходить по ссылкам внутри них, кликать по элементам, автоматически заполнять и отправлять формы с данными. Если вам нужно спарсить сайт, работающий на AJAX, или автоматически авторизоваться где-либо и программно оставить сообщения (например на форуме), Selenium это то, что вам нужно.

Selenium - эмуляция действий в браузере Лого Pythono.ru Selenium - эмуляция действий в браузере

Если у вас есть Android телефон, вы можете скачать наш учебник по Python