add button to GUI

This commit is contained in:
Lei PAN
2022-05-27 12:38:36 +02:00
parent c50787e4bf
commit 1b446965aa
4 changed files with 39 additions and 13 deletions
+18 -2
View File
@@ -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)
+5 -2
View File
@@ -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,7 +27,8 @@ 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(
CommandorPage(contact, store_type=store_choose_state, proxy_type=proxy_type, mode=mode).start_page,
proxy) proxy)
+6
View File
@@ -0,0 +1,6 @@
from enum import Enum
class ModeEnum(Enum):
AUTOMATIC = "AUTOMATIC"
MANUAL = "MANUAL"
+8 -7
View File
@@ -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,6 +132,7 @@ 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()
if self.appointment_mode == ModeEnum.AUTOMATIC:
self.resolve_captcha() self.resolve_captcha()
self.is_filling_fields = False self.is_filling_fields = False
@@ -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):