Найти в Дзене

Утилита для переноса музыки из одного сервиса в другой с помощью Python и Selenium (Часть 2)

Оглавление

Всем привет

Продолжаем парсить сайты с помощью Selenium и Python и автоматизировать процесс переноса музыкальной библиотеки из одного муз. сервиса в другой.

Если вы здесь впервые, то обязательно ознакомьтесь с предыдущими статьями, чтобы все понимать и чувствовать себя комфортно.

Также я подумал, что было бы неплохо поделиться с вами хорошим небольшим курсом видео на YouTube по Selenium, по которому я и учился всему этому безобразию.

К делу

В последний раз мы остановились на том, что научились открывать браузер и вошли в свой аккаунт в Яндекс.Музыке.

Теперь неплохо было бы научиться находить треки в библиотеке сервиса и добавлять их к себе.

Как лайкнуть песенку?

Поиск треков

Перейдем на главную страницу.

-2

В верхней части видим поле для поиска. Введем туда название какой-нибудь песенки и нажмем Enter, конечно же.

-3

Замечаем, что текст, введенный в поиск, подставляется в URL страницы, на которой отображаются результаты. Иными словами, когда мы нажимаем поиск, то Яндекс.Музыка выдает нам ответ по запросу search с аргументом text ("%20" скорее всего означает пробел).

Как мы можем это реализовать в программе?

Открытие веб-страниц

Чтобы открыть сайт, необходимо обратиться к экземпляру веб-драйвера и вызвать метод get:

driver.get(YOUR_URL)

После выполнения этой строчки в вашем браузере откроется сайт, URL которого вы указали.

Покопаемся в коде страницы

Итак, пришло время залезть в HTML и найти элемент, на который нам нужно кликнуть, чтобы добавить композицию в свою библиотеку.

Для этого в Chrome, как и в остальных браузерах, есть специальный инструмент, вызвать который можно, нажав на ПКМ и выбрав пункт "Просмотреть код".

-4

Перед нами открывается страшная картина:

страшная_картина.пнг
страшная_картина.пнг

Но не волнуйтесь, мы не будем все это читать, а просто воспользуемся штучкой, которая нам сама покажет нужный кусок кода. Жмакаем на выделенную на скрине кнопочку. Выделяем сердечко и кликаем, в правой панели покажется код разметки, соответствующий выбранному визуальному элементу.

-6

Поиск элементов на странице Selenium

Чтобы получить экземпляр какого-то элемента с веб-станицы, нужно воспользоваться специальным методом драйвера:

element = driver.find_element_by_xpath(XPATH)

Что такое XPath? Ну, это такая строчка, представляющая собой запрос к коду разметки. С его помощью мы сможем без проблем находить элементы на страничке.

Чтобы получить XPath нужно кликнуть по нужной области ЛКМ. И нажать вот на эти кнопочки, короче:

как-то так...
как-то так...

Теперь у нас есть XPath сердечка, на которое нужно нажать.

Как кликнуть?

Чтобы кликнуть на полученный элемент, надо вызвать у него метод click:

element.click()

Однако, это работает только с кнопками - кликабельными элементами. Если нам нужно нажать не на кнопку (а это сердечко, как оказалось, не кнопка), то придется немножко ухищряться. Для этих целей я использую ActionChains. Не буду вдаваться в подробности, что это такое, просто скажу, что это позволяет последовательно выполнять низкоуровневые действия вроде движения курсора, если я все правильно понял... :)

Итак, чтобы кликать на любой элемент создам специальную функцию:

Пишите в комментарии свои варианты названия этой функции, потому что мне не нравится такой нейм
Пишите в комментарии свои варианты названия этой функции, потому что мне не нравится такой нейм

Что она делает? Она ставит курсор на переданный элемент и кликает.

Лайкнем же песенку наконец!

Так, я создал файлик, куда буду кидать все функции, связанные с Яндекс.Музыкой. Теперь реализую там функцию, которая будет лайкать песенку, следующим образом:

-9

Теперь залезем в main:

-10

Можно запускать main и смотреть, что получится!

!!! Если возникли какие-то ошибки с импортом, то добавьте __init__.py в папку webbrowser, это сделает ее пакетом !!!

Исходный код обновляется:

https://github.com/Victorman5/MisicLiker

<-- Предыдущая часть | | | Следующая часть -->