diff --git a/appointment.py b/appointment.py index c505dbf..9e07a1a 100644 --- a/appointment.py +++ b/appointment.py @@ -2,6 +2,7 @@ import PySimpleGUI as sg # First the window layout in 2 columns from main import start_book +from pojo.ModeEnum import ModeEnum KEY_CHOOSE_STORE = "CHOOSE_STORE" KEY_START_NUMBER = "KEY_START_NUMBER" @@ -13,6 +14,9 @@ KEY_PROXY_CC = "KEY_PROXY_CC" KEY_FAUBOURG = "KEY_FAUBOURG" KEY_GEORGE = "KEY_GEORGE" KEY_SEVRES = "KEY_SEVRES" +KEY_AUTOMATIC = "KEY_AUTOMATIC" +KEY_MANUAL = "KEY_MANUAL" +GROUP_MODE = "GROUP_MODE" GROUP_STORE = "STORE" GROUP_PROXY = "GROUP_PROXY" @@ -36,12 +40,19 @@ proxy_settings_column = [ [sg.Radio('res(速度)', group_id=GROUP_PROXY, key=KEY_PROXY_RES, default=True)], [sg.Radio('cc(稳定)', group_id=GROUP_PROXY, key=KEY_PROXY_CC, default=False)], ] + +mode_settings_column = [ + [sg.Text("约会模式")], + [sg.Radio('手动', group_id=GROUP_MODE, key=KEY_MANUAL, default=True)], + [sg.Radio('自动', group_id=GROUP_MODE, key=KEY_AUTOMATIC, default=False)], +] # ----- Full layout ----- layout = [ [ sg.Column(file_list_column), sg.Column(store_settings_column), - sg.Column(proxy_settings_column) + sg.Column(proxy_settings_column), + sg.Column(mode_settings_column) ] ] @@ -57,6 +68,7 @@ while True: end_line = int(values[KEY_END_NUMBER]) max_workers = int(values[KEY_MAX_WORKERS]) store_type = 0 + mode = ModeEnum.MANUAL if values[KEY_FAUBOURG]: store_type = 1 elif values[KEY_GEORGE]: @@ -69,7 +81,11 @@ while True: proxy_type = 1 elif values[KEY_PROXY_RES]: proxy_type = 0 - start_book(start_line, end_line, store_choose_state=store_type, max_workers=max_workers, proxy_type=proxy_type) + + if values[KEY_AUTOMATIC]: + mode = ModeEnum.AUTOMATIC + start_book(start_line, end_line, store_choose_state=store_type, max_workers=max_workers, proxy_type=proxy_type, + mode=mode) # except Exception as error: # print("Not Integer: ") # print(error) diff --git a/main.py b/main.py index 28397d6..e05c530 100644 --- a/main.py +++ b/main.py @@ -4,6 +4,7 @@ from concurrent.futures import ThreadPoolExecutor import params from logs.AppLogging import init_logger +from pojo.ModeEnum import ModeEnum from utils.excel_reader import ExcelHelper from workers.commandor_page import CommandorPage @@ -13,7 +14,8 @@ logger = logging.getLogger() logger.addHandler(logging.StreamHandler(stream=sys.stdout)) -def start_book(start_number, end_number, store_choose_state=0, max_workers=10, proxy_type=0): +def start_book(start_number, end_number, store_choose_state=0, max_workers=10, proxy_type=0, + mode: ModeEnum = ModeEnum.MANUAL): # read the contact, and contact the 2 objects together excel_reader = ExcelHelper() all_contacts = excel_reader.read_contacts() @@ -25,8 +27,9 @@ def start_book(start_number, end_number, store_choose_state=0, max_workers=10, p for contact in contacts: proxy = get_proxy(contact.phone, proxy_type) # start the task in thread - executor.submit(CommandorPage(contact, store_type=store_choose_state, proxy_type=proxy_type).start_page, - proxy) + executor.submit( + CommandorPage(contact, store_type=store_choose_state, proxy_type=proxy_type, mode=mode).start_page, + proxy) def get_proxy(phone_number, proxy_type=0): diff --git a/pojo/ModeEnum.py b/pojo/ModeEnum.py new file mode 100644 index 0000000..4a37bf2 --- /dev/null +++ b/pojo/ModeEnum.py @@ -0,0 +1,6 @@ +from enum import Enum + + +class ModeEnum(Enum): + AUTOMATIC = "AUTOMATIC" + MANUAL = "MANUAL" diff --git a/workers/commandor_page.py b/workers/commandor_page.py index c567c76..1cb8c80 100644 --- a/workers/commandor_page.py +++ b/workers/commandor_page.py @@ -10,6 +10,7 @@ from playwright.sync_api import sync_playwright import params from params import PROXY_SERVER, PROXY_PASSWORD +from pojo.ModeEnum import ModeEnum from pojo.ReserveResultPojo import ReserveResultPojo, PublishType from pojo.contact_pojo import ContactPojo from workers.SolveCaptch import SolveCaptcha @@ -46,7 +47,7 @@ class Tls(threading.local): class CommandorPage: tls = Tls() - def __init__(self, contact: ContactPojo, store_type=0, proxy_type=0): + def __init__(self, contact: ContactPojo, store_type=0, proxy_type=0, mode: ModeEnum = ModeEnum.MANUAL): self.otp_value = None self.logger = logging.getLogger("CommandorPage:" + str(contact.phone)) self.is_finished = False @@ -55,6 +56,7 @@ class CommandorPage: self.is_event_sent = False self.is_captcha_in_error = False self.is_filling_fields = False + self.appointment_mode = mode # 0: random # 1: faubourg # 2: George @@ -130,7 +132,8 @@ class CommandorPage: self._set_email(self.contact.mail) self.setIdNumber(self.contact.passport) self._checkCgu() - self.resolve_captcha() + if self.appointment_mode == ModeEnum.AUTOMATIC: + self.resolve_captcha() self.is_filling_fields = False def start_browser(self, proxy, pwright, device) -> Union[str, None]: @@ -244,15 +247,13 @@ class CommandorPage: if not self.is_finished: params.oracle_log_sender.send_double_data_error(self.contact) self.is_finished = True - time.sleep(1) - self.browser.close() + self.termine() elif TOO_MANY_REQUEST_ERROR_MESSAGE in erro_content: # this email has been already used if not self.is_finished: params.oracle_log_sender.send_too_many_error(self.contact) self.is_finished = True - time.sleep(1) - self.browser.close() + self.termine() elif CAPTCHA_ERROR_MESSAGE in erro_content: # this email has been already used self.is_captcha_in_error = True @@ -260,8 +261,7 @@ class CommandorPage: params.oracle_log_sender.send_captcha_error(self.contact) self.is_finished = True # no need to retry captcha, if retry ,will generate DOUBLE_REQUEST_ERROR_MESSAGE - time.sleep(1) - self.browser.close() + self.termine() # self.resolve_captcha() def _set_email(self, email): @@ -314,6 +314,7 @@ class CommandorPage: def termine(self): self.logger.info("will close browser") + time.sleep(1) self.browser.close() def publish_message_to_queue(self, contact: ContactPojo, status: PublishType, url: str):