Используй время правильно: автоматизация процессов в Tinder

от автора


Думаю многие любят знакомиться в соц. сетях и пользуются приложениями (например Tinder),
но часто уходит много времени на то, что бы ставить лайки и отправлять первые
сообщения. Я считаю что это монотонные действия которые только отталкивают от
общения и знакомства. Если ты программист, зачем быть как все, давай вместе со
мной автоматизируем процесс монотонных действий и оставим свое внимание только
для приятного общения, но обо всём по порядку.

Подготовка

В данной статье я буду использовать браузер Chrome.

  1. Создадим папку с проектом bot_tinder.
  2. В папке bot_tinder создадим подпапки с названиямиchromedriver_for_win и chromedriver_for_mac, и chromedriver_for_lin (т.к. реализацию делаем для 3 ОС Windows, macOS, Linux).
  3. Скачаем webdriver под вашу версию браузера (я использую Chrome, если используете Firefox то можно скачать от сюда), для большего сходства с моей реализации можете скачать для каждой ОС.
  4. Скаченные файлы размещаем по папкам chromedriver_for_win, chromedriver_for_mac, chromedriver_for_lin.

    Если скачали только для своей ОС, ничего страшного, т.к. в коде это предусмотрим.

  5. В папке bot_tinder создадим файл с названием log.txt (в него записываем номер телефона по которому будет заходить в Tinder). Формат без восьмерки: 9851234567
  6. В папке bot_tinder создадим файлы tinder.py, function.py.

В итоге у вас должно получиться так:

В каждой папке должен располагаться файл webdriver скаченный ранее.

Если реализуете только под свою ОС, тогда  файл webdriver должен располагаться только в одной из папок с названием вашей ОС «chromedriver_for_вашаОС».

Реализация

В файле tinder.py импортируем библиотеку:

# -*- coding: utf-8-*- from selenium import webdriver

В файле function.py импортируем библиотеки:

from selenium.common.exceptions import NoSuchElementException, ElementNotInteractableException from sys import platform from time import sleep import datetime

Далее в файле function.py создаем переменные которые нам позже понадобятся:

error = '' warning = '' ok = '' oc = '' like = '' all_sleep = 3 like_sleep = 2

Значки удалились интерпретатором Хабр, но должно быть так:

Значки можете скопировать с сайта или использовать библиотеку emoji.
Переменные all_sleep, like_sleep указывают на время задержки в секундах.

После в файле function.py создаем функции:

  • Первая функция будет определять дату и время:
    def get_data_time():     time_now = datetime.datetime.now()     return time_now.strftime("%d-%m-%Y %H:%M")

  • Вторая функция будет определять Вашу ОС и обращаться к нужному webdriver:
    def get_OC():     """     Define OS.     :return: OS information and path to chromedriver.exe     """     if platform == "linux" or platform == "linux2":         time_now = datetime.datetime.now()         information = "[" + get_data_time() + '] {} Ваша ОС Linux'.format(oc)         put = "chromedriver_for_lin/**название webdriver**"         return information, put      elif platform == "darwin":         time_now = datetime.datetime.now()         information = "[" + get_data_time() + '] {} Ваша ОС Mac'.format(oc)         put = "chromedriver_for_mac/**название webdriver**"         return information, put      elif platform == "win32":         time_now = datetime.datetime.now()         information = "[" + get_data_time() + '] {} Ваша ОС Windows'.format(oc)         put = "chromedriver_for_win/chromedriver.exe"         return information, put

    Не забудьте прописать путь к webdriver в переменной put.

  • Третья функция будет читать номер телефона из файла log.txt:
    def information_from_txt_files():     """     Read the .txt files     :return: Information. Login.     """     information = ''     with open('log.txt', 'r') as file:         log = file.read()         information += "[" + get_data_time() + \                        '] {} Логин для входа на сайт Tinder: {}'.format(ok, log)      return information, log

  • Четвертая функция будет закрывать всплывающее окно на сайте Tinder:
    def close_start_popups(browser):     """     Close the popup.     :param browser: parameter of the running browser.     :return: information.     """     sleep(all_sleep)     try:         browser.find_element_by_xpath('//button[@aria-label="Закрыть"]').click()         return "[" + get_data_time() + "] {} Всплывающее окно закрыто.".format(ok)     except ElementNotInteractableException as err:         return "[" + get_data_time() + '] {} ' + err + ''.format(error)     except NoSuchElementException as err:         return "[" + get_data_time() + '] {} Не нашел всплавающего окна.'.format(error)

  • Пятая функция будет нажимать кнопку «Войти с помощью номера телефона»:
    def log_in_using_your_phone(browser):     """     Click the Login button using the phone number.     :param browser: parameter of the running browser.     :return: information     """     sleep(all_sleep)     try:         browser.find_element_by_xpath('//div[@id="modal-manager"]').find_element_by_xpath('//button[@aria-label="Войти с помощью номера телефона"]').click()         return "[" + get_data_time() + "] {} Войти с помощью номера телефона.".format(ok)     except ElementNotInteractableException as err:         return "[" + get_data_time() + '] {} ' + err + ''.format(error)     except NoSuchElementException as err:         browser.find_element_by_xpath('//button[text()="Другие варианты"]').click()         return log_in_using_your_phone(browser)

  • Шестая функция будет вводить номер телефона:
    def input_number_phone(browser, log):     """     Enter the phone number.     :param browser: parameter of the running browser.     :param log: phone number.     :return: information.     """     sleep(all_sleep)     try:         browser.find_element_by_name('phone_number').send_keys(log)         return "[" + get_data_time() + '] {} Введен номер телефона {}'.format(ok, log)     except NoSuchElementException:         return "[" + get_data_time() + '] {} Не нашел окна для ввода телефона.'.format(error)

  • Седьмая функция нажимает кнопку «Продолжить»:
    def go_on(browser):     """     Click the Continue button.     :param browser: parameter of the running browser.     :return: information     """     sleep(all_sleep)     try:         browser.find_element_by_xpath('//span[text()="Продолжить"]').click()         return "[" + get_data_time() + '] {} Нажата кнопка Продолжить'.format(ok)     except NoSuchElementException:         return "[" + get_data_time() + '] {} Не нашел кнопки Продолжить.'.format(error)

  • Восьмая функция запрашивает ввод кода, который придет Вам на телефон:
    def code_check():     """     Entering a code and checking the entered code.     :return: entered code     """     kod_numbers = input("[" + get_data_time() + "] {} Введите код: ".format(warning))     if len(kod_numbers) != 6:         print("[" + get_data_time() + '] {} Код не верный.'.format(error))         return code_check()     else:         print("[" + get_data_time() + '] {} Формат кода проверен.'.format(ok))         return kod_numbers

    Так же функция проверяет кол-во введенных цифр.

  • Девятая функция вводит код:
    def input_cod(browser):     """     Code entry.     :param browser: parameter of the running browser.     :return: information.     """     try:         kod_numbers = code_check()         kod = browser.find_elements_by_xpath('//input[@type="tel"]')         n = 0         for i in kod:             i.send_keys(kod_numbers[n])             n += 1         return "[" + get_data_time() + '] {} Код введен.'.format(ok)     except NoSuchElementException:         return "[" + get_data_time() + '] {} Не нашел полей для ввода кода.'.format(error)

  • Десятая функция разрешает определение геолокации:
    def geolocation_ok(browser):     """     We allow geolocation.     :param browser: parameter of the running browser.     :return: information.     """     sleep(all_sleep)     try:         browser_button = browser.find_elements_by_tag_name("button")         button_list = {i.text: i for i in browser_button}         if "РАЗРЕШИТЬ" in button_list.keys():             button = [value for key, value in button_list.items() if key == "РАЗРЕШИТЬ"]             button[0].click()             return "[" + get_data_time() + '] {} Геолокация разрешена.'.format(ok)         else:             return "[" + get_data_time() + '] {} Не нашел полей Разрешить для Геолокации.'.format(error)     except NoSuchElementException:         return "[" + get_data_time() + '] {} Не нашел полей Разрешить для Геолокации.'.format(error)

  • Одиннадцатая функция отключает оповещение:
    def notice_off(browser):     """     Turn off notifications.     :param browser: parameter of the running browser.     :return: information.     """     sleep(all_sleep)     try:         browser_button = browser.find_elements_by_tag_name("button")         button_list = {i.text: i for i in browser_button}         if "НЕИНТЕРЕСНО" in button_list.keys():             button = [value for key, value in button_list.items() if key == "НЕИНТЕРЕСНО"]             button[0].click()             return "[" + get_data_time() + '] {} Уведомления отключены.'.format(ok)         else:             return "[" + get_data_time() + '] {} Не нашел поле Неинтерсно для Уведомлений.'.format(error)     except NoSuchElementException:         return "[" + get_data_time() + '] {} Не нашел поле Неинтерсно для Уведомлений.'.format(error)

  • Двенадцатая функция закрывает всплывающие окна:
    def popup_windows_off(browser):     """     Close popups.     :param browser: parameter of the running browser     :return: information     """     sleep(like_sleep)     try:         browser_button = browser.find_elements_by_tag_name("button")         button_list = {i.text: i for i in browser_button}         if "НЕИНТЕРЕСНО" in button_list.keys():             button = [value for key, value in button_list.items() if key == "НЕИНТЕРЕСНО"]             button[0].click()             print("[" + get_data_time() + '] {} Всплавающее окно.'.format(ok))     except NoSuchElementException:         pass

  • Тринадцатая функция ставит Like:
    def click_like(browser):     """     Click LIKE.     :param browser: parameter of the running browser     :return: information     """     sum_like = 0     while True:         try:             popup_windows_off(browser)             browser.find_element_by_xpath('//button[@aria-label="Лайк"]').click()             sum_like += 1             print("[" + get_data_time() + '] {} - {}'.format(like, str(sum_like)))         except NoSuchElementException:             print("[" + get_data_time() + '] {} Не нашел поле Лайк.'.format(error))

Теперь переходим к файлу tinder.py и прописываем импорт всех функций:

from function import get_OC, information_from_txt_files, close_start_popups, notice_off, click_like, log_in_using_your_phone, input_number_phone, go_on, input_cod, geolocation_ok

Определяем ОС:

# Определение ОС info, put = get_OC() print(info)

Задаем параметры браузера:

# путь к драйверу chrome chromedriver = put options = webdriver.ChromeOptions() options.add_argument('--start-minimize') browser = webdriver.Chrome(executable_path=chromedriver, chrome_options=options)

Если вы работаете с Firefox тогда, прочтите как работать с ним с помощью библиотеки selenium.webdriver.

Запускается браузер и заходит на страницу Tinder:

# После успешного входа в систему переходим на страницу browser.get('https://tinder.com/app/recs')

Теперь начинаем использовать функции подготовленные ранее:

# Открываем txt файлы с данными info_txt, log = information_from_txt_files() print(info_txt) # Закрываем в начале всплывающее окно print(close_start_popups(browser)) # Нажимаем Вход с помощью телефона print(log_in_using_your_phone(browser)) # Вводим номер телефона print(input_number_phone(browser, log)) # Нажимаем кнопку Продолжить print(go_on(browser)) # Вводим код print(input_cod(browser)) # Нажимаем кнопку Продолжить print(go_on(browser)) # Нажимаем кнопку Разрешить определять геолокацию print(geolocation_ok(browser)) # Нажимаем Выключить уведомления print(notice_off(browser)) # Нажимаем Лайк click_like(browser)

Заключение

В итоге получите бота который заходит на сайт Tinder и нажимает на Like.

Вам остается только зайти в приложение через пару часов и начать общаться с уже взаимными
симпатиями.

Автоматизация — это старания мужчин упростить работу настолько, чтобы её могли делать женщины.

В следующей статье реализуем возможность отправлять сообщения для взаимных лайков.

ссылка на оригинал статьи https://habr.com/ru/post/494990/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *