рд╕рдордп рдХрд╛ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдЯрд┐рдВрдбрд░ рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдЪрд╛рд▓рди


рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕рд╛рдорд╛рдЬрд┐рдХ рд░реВрдк рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯрд┐рдВрдбрд░),
рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░ рдкрд╣рд▓реЗ
рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкрд╕рдВрдж рдХрд░рдиреЗ рдФрд░ рднреЗрдЬрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ ред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпреЗ рдиреАрд░рд╕ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рдХреЗрд╡рд▓
рд╕рдВрдЪрд╛рд░ рдФрд░ рдбреЗрдЯрд┐рдВрдЧ рдХреЛ рдкреАрдЫреЗ рдЫреЛрдбрд╝рддреА рд╣реИрдВ ред рдпрджрд┐ рдЖрдк рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВ, рддреЛ рд╣рд░ рдХрд┐рд╕реА рдХреА рддрд░рд╣ рдХреНрдпреЛрдВ рд╣реИрдВ, рдЖрдЗрдП
рдореЗрд░реЗ рд╕рд╛рде рдиреАрд░рд╕ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ рдзреНрдпрд╛рди рдХреЗрд╡рд▓
рд╕реБрдЦрдж рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВ , рд▓реЗрдХрд┐рди рдХреНрд░рдо рдореЗрдВ рд╕рдм рдХреБрдЫ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

рдкреНрд░рд╢рд┐рдХреНрд╖рдг


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ ред
  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 files рдмрдирд╛рдПрдВ ред

рдирддреАрдЬрддрди, рдЖрдкрдХреЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд



рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП : рдкреНрд░рддреНрдпреЗрдХ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкрд╣рд▓реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЧрдИ рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЕрдкрдиреЗ OS рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдлрд╝рд╛рдЗрд▓ рдХреЗрд╡рд▓ рдЖрдкрдХреЗ OS "Chromedriver_for_your OS " рдХреЗ рдирд╛рдо рд╡рд╛рд▓реЗ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


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
рдЖрдЗрдХрди рдХреЛ рд╣реЗрдмрд░ рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:



рдЖрдк рд╕рд╛рдЗрдЯ рд╕реЗ рдЖрдЗрдХрди рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрдореЛрдЬреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
рдЪрд░ all_sleep , like_sleep рд╕реЗрдХрдВрдб рдореЗрдВ рджреЗрд░реА рдХрд╛ рд╕рдордп рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВред

рдмрд╛рдж рд╣рдо рдХрд╛рд░реНрдпреЛрдВ рдмрдирд╛рдиреЗ рдореЗрдВ function.py рдлрд╝рд╛рдЗрд▓ :


  • рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛:
    def get_data_time():
        time_now = datetime.datetime.now()
        return time_now.strftime("%d-%m-%Y %H:%M")

  • рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдЖрдкрдХреЗ рдУрдПрд╕ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ :

    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

    рдкреБрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд╡реЗрдмрдбреНрд░рд╛рдЗрд╡рд░ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рд▓рд┐рдЦрдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ ред

  • рддреАрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди 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

  • рдЪреМрдерд╛ рдХрд╛рд░реНрдп рдЯрд┐рдВрдбрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдкреЙрдкрдЕрдк рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛:

    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

  • рддреЗрд░рд╣рд╡реЗрдВ рд╕рдорд╛рд░реЛрд╣ рдХреА рддрд░рд╣ рд╣реИ:

    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

OS рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
#  
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)

рдпрджрд┐ рдЖрдк рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ selenium.webdriver рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрдврд╝реЗрдВ ред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд▓реЙрдиреНрдЪ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЯрд┐рдВрдбрд░ рдкреЗрдЬ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ:

#        
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)

рдирд┐рд╖реНрдХрд░реНрд╖


рдЕрдВрдд рдореЗрдВ, рдПрдХ рдмреЙрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдЬреЛ рдЯрд┐рдВрдбрд░ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдЗрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИред

рдЖрдкрдХреЛ рдмрд╕ рдХреБрдЫ рдШрдВрдЯреЛрдВ рдореЗрдВ рдЖрд╡реЗрджрди рдореЗрдВ рдЬрд╛рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЖрдкрд╕реА
рд╕рд╣рд╛рдиреБрднреВрддрд┐ рдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ ред
рдСрдЯреЛрдореЗрд╢рди рдкреБрд░реБрд╖реЛрдВ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рд╣реИ рдХрд┐ рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рдорд╣рд┐рд▓рд╛рдПрдВ рдРрд╕рд╛ рдХрд░ рд╕рдХреЗрдВред
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдЖрдкрд╕реА рдкрд╕рдВрдж рдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗред

All Articles