استخدم الوقت بشكل صحيح: معالجة الأتمتة في 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_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
تم حذف الرموز من قبل مترجم Habr ، ولكن يجب أن تكون على النحو التالي:



يمكنك نسخ الرموز من الموقع أو استخدام مكتبة الرموز التعبيرية .
تشير المتغيرات 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

    تذكر أن يكتب الطريق إلى webdriver في وضع متغير .

  • الوظيفة الثالثة ستقرأ رقم الهاتف من ملف 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

  • الوظيفة الثالثة عشرة:

    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.

عليك فقط الدخول في التطبيق في غضون بضع ساعات والبدء في التحدث مع
التعاطف المتبادل بالفعل .
الأتمتة هي جهد الرجال لتبسيط العمل حتى تتمكن النساء من القيام بذلك.
في المقالة التالية ، سننفذ القدرة على إرسال رسائل للإعجاب المتبادل.

All Articles