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
|
||||
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)
|
||||
|
||||
@@ -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,7 +27,8 @@ 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,
|
||||
executor.submit(
|
||||
CommandorPage(contact, store_type=store_choose_state, proxy_type=proxy_type, mode=mode).start_page,
|
||||
proxy)
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
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,6 +132,7 @@ class CommandorPage:
|
||||
self._set_email(self.contact.mail)
|
||||
self.setIdNumber(self.contact.passport)
|
||||
self._checkCgu()
|
||||
if self.appointment_mode == ModeEnum.AUTOMATIC:
|
||||
self.resolve_captcha()
|
||||
self.is_filling_fields = False
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user