Selenium — поиск ссылки по названию

Привет всем! Сегодня мы узнаем, как делать поиск ссылки по названию и осуществлять переход по ней с помощью Selenium.

Собственно — рассказывать, что это за зверь такой — Selenium — я не буду. Знаете — хорошо. Не знаете — напомню только, что это инструмент для автоматизации действий браузера.

Установка Selenium очень хорошо описана вот тут. Скажу только, что при всей моей нелюбви к документации вся установка свелась к закачке необходимого мне драйвера (скачал под Chrome и Firefox), и прописыванию путей к драйверам в переменных среды:
переменные среды

Конечно, можно использовать данную штуку как инструмент для тестирования, но… что мешает использовать его и для скраппинга? 😉 Впрочем — все всегда зависит от настроения и задачи. Мы же начнем с тестирования и кнопки.

В качестве тестирования будем использовать блог Темы Лебедева (почему и нет?). И в качестве простой, но практичной задачи разберемся, как находить ссылку «Вернуться назад на 10 записей» и переходить по ней.

Итак, у нас имеется блог по ссылке: https://tema.livejournal.com

Загрузив ссылку в браузере давайте посмотрим на исходный код страницы. Особое внимание обратим на название ссылки, которая перебрасывает нас на 10 записей назад:
selenium - переход по ссылке

Собственно — название ссылки есть: << Previous 10 entries
Начинаем кодить. Для начала — подключим вебдрайвер, и возможность использования эмуляции нажатия клавиш:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

Учитывая, что мы будем работать с браузерам, и осуществлять переход по ссылкам — я подключил модуль библиотеку Time, которую мы будем использовать для контроля перехода по ссылкам:
import time

Теперь подключаем браузер:
browser = webdriver.Firefox()
Важно: я буду работать с драйвером Firefox, но если вы предпочитаете использовать Chrome — конструкция вызова драйвера Chrome будет выглядеть следующим образом:
browser = webdriver.Chrome()

Итак… все необходимые библиотеки (время, управление браузером, клавиатурой) — подключены. Подключен драйвер. Теперь нужно загрузить нужную ссылку. Делается это следующим образом:
browser.get(‘https://tema.livejournal.com’)
т.е. фактически мы говорим нечто вроде: браузер, а открой-ка ссылку…

Теперь начинаем цикл, который будет работать до момента, пока будет что открывать:
while True:
после чего используем конструкцию:
bottom = browser.find_element_by_partial_link_text(‘<< Previous 10 entries').click() которая на человеческом языке выглядит как: переменная будет состоять из браузера, в котором нужно найти ссылку по ее названию «<< Previous 10 entries", после чего по ней кликнуть И наконец, после того, как наш робот (а чем это не робот-то?) кликнул по ссылке - нужно подождать 10 секунд: time.sleep(10)

Собственно … это все. Простейшая конструкция по поиску и клику по ссылке в браузере готова 🙂
Важное дополнение:

Правильным в конце работы нашего кода будет отправить команду на закрытие окна браузера:
browser.close(), но учитывая, что наша задача — поиск ссылки по названию, и долистать до самого начала Темыного блога — этот пункт мы пока использовать не будем.

Код в полном виде доступен ниже:

  1. from selenium import webdriver
  2. from selenium.webdriver.common.keys import Keys
  3. import time
  4.  
  5. browser = webdriver.Chrome()
  6. browser.get('https://tema.livejournal.com')
  7. while True:
  8.     bottom = browser.find_element_by_partial_link_text('<< Previous 10 entries').click()
  9.     time.sleep(10)

В случае возникновения вопросов — пожалуйста, задавайте 🙂