add button to GUI
This commit is contained in:
+18
-2
@@ -2,6 +2,7 @@ import PySimpleGUI as sg
|
|||||||
|
|
||||||
# First the window layout in 2 columns
|
# First the window layout in 2 columns
|
||||||
from main import start_book
|
from main import start_book
|
||||||
|
from pojo.ModeEnum import ModeEnum
|
||||||
|
|
||||||
KEY_CHOOSE_STORE = "CHOOSE_STORE"
|
KEY_CHOOSE_STORE = "CHOOSE_STORE"
|
||||||
KEY_START_NUMBER = "KEY_START_NUMBER"
|
KEY_START_NUMBER = "KEY_START_NUMBER"
|
||||||
@@ -13,6 +14,9 @@ KEY_PROXY_CC = "KEY_PROXY_CC"
|
|||||||
KEY_FAUBOURG = "KEY_FAUBOURG"
|
KEY_FAUBOURG = "KEY_FAUBOURG"
|
||||||
KEY_GEORGE = "KEY_GEORGE"
|
KEY_GEORGE = "KEY_GEORGE"
|
||||||
KEY_SEVRES = "KEY_SEVRES"
|
KEY_SEVRES = "KEY_SEVRES"
|
||||||
|
KEY_AUTOMATIC = "KEY_AUTOMATIC"
|
||||||
|
KEY_MANUAL = "KEY_MANUAL"
|
||||||
|
GROUP_MODE = "GROUP_MODE"
|
||||||
GROUP_STORE = "STORE"
|
GROUP_STORE = "STORE"
|
||||||
GROUP_PROXY = "GROUP_PROXY"
|
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('res(速度)', group_id=GROUP_PROXY, key=KEY_PROXY_RES, default=True)],
|
||||||
[sg.Radio('cc(稳定)', group_id=GROUP_PROXY, key=KEY_PROXY_CC, default=False)],
|
[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 -----
|
# ----- Full layout -----
|
||||||
layout = [
|
layout = [
|
||||||
[
|
[
|
||||||
sg.Column(file_list_column),
|
sg.Column(file_list_column),
|
||||||
sg.Column(store_settings_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])
|
end_line = int(values[KEY_END_NUMBER])
|
||||||
max_workers = int(values[KEY_MAX_WORKERS])
|
max_workers = int(values[KEY_MAX_WORKERS])
|
||||||
store_type = 0
|
store_type = 0
|
||||||
|
mode = ModeEnum.MANUAL
|
||||||
if values[KEY_FAUBOURG]:
|
if values[KEY_FAUBOURG]:
|
||||||
store_type = 1
|
store_type = 1
|
||||||
elif values[KEY_GEORGE]:
|
elif values[KEY_GEORGE]:
|
||||||
@@ -69,7 +81,11 @@ while True:
|
|||||||
proxy_type = 1
|
proxy_type = 1
|
||||||
elif values[KEY_PROXY_RES]:
|
elif values[KEY_PROXY_RES]:
|
||||||
proxy_type = 0
|
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:
|
# except Exception as error:
|
||||||
# print("Not Integer: ")
|
# print("Not Integer: ")
|
||||||
# print(error)
|
# print(error)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|||||||
|
|
||||||
import params
|
import params
|
||||||
from logs.AppLogging import init_logger
|
from logs.AppLogging import init_logger
|
||||||
|
from pojo.ModeEnum import ModeEnum
|
||||||
from utils.excel_reader import ExcelHelper
|
from utils.excel_reader import ExcelHelper
|
||||||
from workers.commandor_page import CommandorPage
|
from workers.commandor_page import CommandorPage
|
||||||
|
|
||||||
@@ -13,7 +14,8 @@ logger = logging.getLogger()
|
|||||||
logger.addHandler(logging.StreamHandler(stream=sys.stdout))
|
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
|
# read the contact, and contact the 2 objects together
|
||||||
excel_reader = ExcelHelper()
|
excel_reader = ExcelHelper()
|
||||||
all_contacts = excel_reader.read_contacts()
|
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:
|
for contact in contacts:
|
||||||
proxy = get_proxy(contact.phone, proxy_type)
|
proxy = get_proxy(contact.phone, proxy_type)
|
||||||
# start the task in thread
|
# start the task in thread
|
||||||
executor.submit(CommandorPage(contact, store_type=store_choose_state, proxy_type=proxy_type).start_page,
|
executor.submit(
|
||||||
proxy)
|
CommandorPage(contact, store_type=store_choose_state, proxy_type=proxy_type, mode=mode).start_page,
|
||||||
|
proxy)
|
||||||
|
|
||||||
|
|
||||||
def get_proxy(phone_number, proxy_type=0):
|
def get_proxy(phone_number, proxy_type=0):
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class ModeEnum(Enum):
|
||||||
|
AUTOMATIC = "AUTOMATIC"
|
||||||
|
MANUAL = "MANUAL"
|
||||||
@@ -10,6 +10,7 @@ from playwright.sync_api import sync_playwright
|
|||||||
|
|
||||||
import params
|
import params
|
||||||
from params import PROXY_SERVER, PROXY_PASSWORD
|
from params import PROXY_SERVER, PROXY_PASSWORD
|
||||||
|
from pojo.ModeEnum import ModeEnum
|
||||||
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType
|
from pojo.ReserveResultPojo import ReserveResultPojo, PublishType
|
||||||
from pojo.contact_pojo import ContactPojo
|
from pojo.contact_pojo import ContactPojo
|
||||||
from workers.SolveCaptch import SolveCaptcha
|
from workers.SolveCaptch import SolveCaptcha
|
||||||
@@ -46,7 +47,7 @@ class Tls(threading.local):
|
|||||||
class CommandorPage:
|
class CommandorPage:
|
||||||
tls = Tls()
|
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.otp_value = None
|
||||||
self.logger = logging.getLogger("CommandorPage:" + str(contact.phone))
|
self.logger = logging.getLogger("CommandorPage:" + str(contact.phone))
|
||||||
self.is_finished = False
|
self.is_finished = False
|
||||||
@@ -55,6 +56,7 @@ class CommandorPage:
|
|||||||
self.is_event_sent = False
|
self.is_event_sent = False
|
||||||
self.is_captcha_in_error = False
|
self.is_captcha_in_error = False
|
||||||
self.is_filling_fields = False
|
self.is_filling_fields = False
|
||||||
|
self.appointment_mode = mode
|
||||||
# 0: random
|
# 0: random
|
||||||
# 1: faubourg
|
# 1: faubourg
|
||||||
# 2: George
|
# 2: George
|
||||||
@@ -130,7 +132,8 @@ class CommandorPage:
|
|||||||
self._set_email(self.contact.mail)
|
self._set_email(self.contact.mail)
|
||||||
self.setIdNumber(self.contact.passport)
|
self.setIdNumber(self.contact.passport)
|
||||||
self._checkCgu()
|
self._checkCgu()
|
||||||
self.resolve_captcha()
|
if self.appointment_mode == ModeEnum.AUTOMATIC:
|
||||||
|
self.resolve_captcha()
|
||||||
self.is_filling_fields = False
|
self.is_filling_fields = False
|
||||||
|
|
||||||
def start_browser(self, proxy, pwright, device) -> Union[str, None]:
|
def start_browser(self, proxy, pwright, device) -> Union[str, None]:
|
||||||
@@ -244,15 +247,13 @@ class CommandorPage:
|
|||||||
if not self.is_finished:
|
if not self.is_finished:
|
||||||
params.oracle_log_sender.send_double_data_error(self.contact)
|
params.oracle_log_sender.send_double_data_error(self.contact)
|
||||||
self.is_finished = True
|
self.is_finished = True
|
||||||
time.sleep(1)
|
self.termine()
|
||||||
self.browser.close()
|
|
||||||
elif TOO_MANY_REQUEST_ERROR_MESSAGE in erro_content:
|
elif TOO_MANY_REQUEST_ERROR_MESSAGE in erro_content:
|
||||||
# this email has been already used
|
# this email has been already used
|
||||||
if not self.is_finished:
|
if not self.is_finished:
|
||||||
params.oracle_log_sender.send_too_many_error(self.contact)
|
params.oracle_log_sender.send_too_many_error(self.contact)
|
||||||
self.is_finished = True
|
self.is_finished = True
|
||||||
time.sleep(1)
|
self.termine()
|
||||||
self.browser.close()
|
|
||||||
elif CAPTCHA_ERROR_MESSAGE in erro_content:
|
elif CAPTCHA_ERROR_MESSAGE in erro_content:
|
||||||
# this email has been already used
|
# this email has been already used
|
||||||
self.is_captcha_in_error = True
|
self.is_captcha_in_error = True
|
||||||
@@ -260,8 +261,7 @@ class CommandorPage:
|
|||||||
params.oracle_log_sender.send_captcha_error(self.contact)
|
params.oracle_log_sender.send_captcha_error(self.contact)
|
||||||
self.is_finished = True
|
self.is_finished = True
|
||||||
# no need to retry captcha, if retry ,will generate DOUBLE_REQUEST_ERROR_MESSAGE
|
# no need to retry captcha, if retry ,will generate DOUBLE_REQUEST_ERROR_MESSAGE
|
||||||
time.sleep(1)
|
self.termine()
|
||||||
self.browser.close()
|
|
||||||
# self.resolve_captcha()
|
# self.resolve_captcha()
|
||||||
|
|
||||||
def _set_email(self, email):
|
def _set_email(self, email):
|
||||||
@@ -314,6 +314,7 @@ class CommandorPage:
|
|||||||
|
|
||||||
def termine(self):
|
def termine(self):
|
||||||
self.logger.info("will close browser")
|
self.logger.info("will close browser")
|
||||||
|
time.sleep(1)
|
||||||
self.browser.close()
|
self.browser.close()
|
||||||
|
|
||||||
def publish_message_to_queue(self, contact: ContactPojo, status: PublishType, url: str):
|
def publish_message_to_queue(self, contact: ContactPojo, status: PublishType, url: str):
|
||||||
|
|||||||
Reference in New Issue
Block a user