Merge branch 'feature/auto_with_checkresults' into feature/automatic

This commit is contained in:
PAN Lei
2022-06-14 21:55:43 +02:00
18 changed files with 259 additions and 87 deletions
+10 -12
View File
@@ -3,14 +3,15 @@ import PySimpleGUI as sg
# First the window layout in 2 columns
from main import start_book
from pojo.ModeEnum import ModeEnum
from proxy.proxy_type import ProxyType
KEY_CHOOSE_STORE = "CHOOSE_STORE"
KEY_START_NUMBER = "KEY_START_NUMBER"
KEY_END_NUMBER = "KEY_END_NUMBER"
KEY_MAX_WORKERS = "KEY_MAX_WORKERS"
KEY_RANDOM = "KEY_RANDOM"
KEY_PROXY_RES = "KEY_PROXY_RES"
KEY_PROXY_CC = "KEY_PROXY_CC"
KEY_PROXY_BRIGHTDATA = "KEY_PROXY_BRIGHTDATA"
KEY_PROXY_NETNUT = "KEY_PROXY_NETNUT"
KEY_FAUBOURG = "KEY_FAUBOURG"
KEY_GEORGE = "KEY_GEORGE"
KEY_SEVRES = "KEY_SEVRES"
@@ -37,8 +38,8 @@ store_settings_column = [
]
proxy_settings_column = [
[sg.Text("代理ip池")],
[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('亮数据', group_id=GROUP_PROXY, key=KEY_PROXY_BRIGHTDATA, default=True)],
[sg.Radio('Netnut', group_id=GROUP_PROXY, key=KEY_PROXY_NETNUT, default=False)],
]
mode_settings_column = [
@@ -76,19 +77,16 @@ while True:
elif values[KEY_SEVRES]:
store_type = 3
proxy_type = 0
if values[KEY_PROXY_CC]:
proxy_type = 1
elif values[KEY_PROXY_RES]:
proxy_type = 0
proxy_type = ProxyType.BRIGHT_DATA
if values[KEY_PROXY_NETNUT]:
proxy_type = ProxyType.NETNUT
elif values[KEY_PROXY_BRIGHTDATA]:
proxy_type = ProxyType.BRIGHT_DATA
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)
elif event == "Exit" or event == sg.WIN_CLOSED:
break
+16 -17
View File
@@ -8,8 +8,11 @@ from playwright.sync_api import sync_playwright
import params
from logs.LogSender import TYPE_EVENT_CHECK_RESULTS, LOG_SUBJECT_EVENT
from notification.AcceptedResultPojo import get_accepted_result_from
from notification.mailer import Mailer
from pojo.ReserveResultPojo import ReserveResultPojo
from pojo.ResultEnum import ResultEnum
from proxy.proxy_type import ProxyType
SORRY_SENTENCE_FR = "nous sommes sincèrement désolés de n'avoir pu vous satisfaire cette fois-ci"
SORRY_SENTENCE_EN = "we are extremely sorry that we were not able to fulfill"
@@ -18,6 +21,7 @@ PENDING_SENTENCE = "Ce soir, entre 20:00 et 20:30, vous obtiendrez une réponse
PENDING_SENTENCE_EN = "This evening between 20:00 and 20:30 you will receive a response by email."
BLANK_URL = "about:blank"
mailer = Mailer()
class TlsPlaywright(threading.local):
def __init__(self) -> None:
@@ -37,7 +41,7 @@ class ResultChecker:
device = random.choice(params.DEVICES)
self.logger.info("模拟设备: " + device)
pixel_2 = self.tls.playwright.devices[device]
context = self.browser.new_context(**pixel_2, locale='en-GB')
context = self.browser.new_context(**pixel_2, locale='fr-FR')
self.page = context.new_page()
# hide webdriver information
self.page.add_init_script("""() => {
@@ -57,29 +61,18 @@ class ResultChecker:
def run(self, reserve_pojo: ReserveResultPojo, collection):
print("Launched worker in ", threading.current_thread().name)
url = reserve_pojo.url
phone_number = reserve_pojo.phone
# url_to_check = url.replace("register/", "")
# url_to_check = url + "?lang=fr"
print("url is " + url)
content = None
random_id_number = str(phone_number)[1:len(str(phone_number))]
proxy_username = "panleicim-res-fr-" + random_id_number
print("proxy_username is " + proxy_username)
proxy = {
"server": params.PROXY_SERVER,
"username": proxy_username,
"password": params.PROXY_PASSWORD
"server": params.BRIGHT_DATA_PROXY_SERVER,
"username": params.BRIGHT_DATA_PROXY_USERNAME,
"password": params.BRIGHT_DATA_PROXY_PASSWORD
}
while content is None:
content = self.load_page(self.tls.playwright, proxy, url)
random_id_number = params.get_random_id_number_for_proxy()
proxy_username = "panleicim-res-fr-" + random_id_number
print("proxy_username is " + proxy_username)
proxy = {
"server": params.PROXY_SERVER,
"username": proxy_username,
"password": params.PROXY_PASSWORD
}
proxy = params.get_proxy(ProxyType.NETNUT)
print(content)
self.browser.close()
print("Stopped worker in ", threading.current_thread().name)
@@ -101,6 +94,11 @@ class ResultChecker:
else:
print("status is ACCEPTED")
status = ResultEnum.ACCEPTED
# send email
try:
mailer.send_email(get_accepted_result_from(reserve_pojo))
except Exception as err:
print(err)
collection.document(reserve_pojo.id).update({u'accepted': status.name})
@@ -120,7 +118,8 @@ def check_results():
for reserve in result_list:
count = count + 1
if reserve.accepted is None or ResultEnum.ACCEPTED.value == reserve.accepted:
executor.submit(ResultChecker().run, reserve, collection)
if reserve.url != BLANK_URL:
executor.submit(ResultChecker().run, reserve, collection)
else:
print("status is " + reserve.accepted)
+63
View File
@@ -0,0 +1,63 @@
from builtins import list
import sqlalchemy
from sqlalchemy import MetaData, Column, String, Integer, DateTime, Table
from sqlalchemy.orm import Session
from sqlalchemy_utils import database_exists, create_database
import definitions
import params
from pojo.ReserveResultPojo import ReserveResultPojo
from pojo.captcha_error_contact_pojo import ContactInErrorPojo, ERROR_TYPE_CAPTCHA
class LocalDbManager:
def __init__(self, path: str):
self.session = Session(self.init_db(path))
def init_db(self, path: str):
uri_for_db = "sqlite:///{}/{}.db?check_same_thread=false".format(path, "appointment")
print(uri_for_db)
# 2.-Turn on database engine
db_engine = sqlalchemy.create_engine(uri_for_db) # ensure this is the correct path for the sqlite file.
if not database_exists(uri_for_db):
create_database(uri_for_db)
connextion = db_engine.connect()
if not db_engine.dialect.has_table(connextion,
ContactInErrorPojo.__tablename__): # If table don't exist, Create.
metadata = MetaData(db_engine)
# Create a table with the appropriate Columns
Table(ContactInErrorPojo.__tablename__, metadata,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('mail', String),
Column('phone', String),
Column('passport', String),
Column('last_name', String),
Column('first_name', String),
Column('ccid', String),
Column('position', Integer),
Column('error_type', Integer),
Column('update_at', DateTime),
Column('create_at', DateTime))
# Implement the creation
metadata.create_all()
return db_engine
def insert_or_update(self, instance: ContactInErrorPojo):
self.session.merge(instance)
self.session.commit()
def get_all_captcha_error_contacts(self) -> list:
return self.session.query(ContactInErrorPojo).filter(ContactInErrorPojo.error_type == ERROR_TYPE_CAPTCHA).all()
def handle_success(self, reservePojo: ReserveResultPojo):
# delete the contact from table
self.session.query(ContactInErrorPojo).filter(ContactInErrorPojo.mail == reservePojo.email).delete()
if __name__ == '__main__':
list = params.local_db_manager.get_all_captcha_error_contacts()
for item in list:
print(item.mail)
+2 -3
View File
@@ -1,11 +1,11 @@
import configparser
import os
import getpass
import os
from pathlib import Path
home = str(Path.home())
config = configparser.ConfigParser()
print("home path: " + home)
# check the config file exsistence
config_file_path = home + "/config.ini"
config.read(config_file_path)
@@ -14,5 +14,4 @@ FIREBASE_CONFIG_FILE = config['DEFAULT']['firebase_config_file']
LOGS_DIR = config['DEFAULT']['LOGS_DIR']
username = getpass.getuser()
LOG_SOURCE = username
ROOT_DIR = os.path.dirname(os.path.abspath(__file__))
+21 -14
View File
@@ -5,6 +5,8 @@ from concurrent.futures import ThreadPoolExecutor
import params
from logs.AppLogging import init_logger
from pojo.ModeEnum import ModeEnum
from pojo.contact_pojo import ContactPojo
from proxy.proxy_type import ProxyType
from utils.excel_reader import ExcelHelper
from workers.commandor_page import CommandorPage
@@ -14,7 +16,7 @@ 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=ProxyType.BRIGHT_DATA,
mode: ModeEnum = ModeEnum.MANUAL):
# read the contact, and contact the 2 objects together
excel_reader = ExcelHelper()
@@ -25,26 +27,31 @@ def start_book(start_number, end_number, store_choose_state=0, max_workers=10, p
logger.info(contacts)
with ThreadPoolExecutor(max_workers=max_workers) as executor:
for contact in contacts:
proxy = get_proxy(contact.phone, proxy_type)
proxy = get_proxy(proxy_type)
# start the task in thread
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):
# random_id_number = str(phone_number)[1:len(str(phone_number))]
random_id_number = params.get_random_id_number_for_proxy()
proxy_username = params.get_proxy_name_prefix(proxy_type) + random_id_number
logger.info("proxy_username is " + proxy_username)
proxy = {
"server": params.PROXY_SERVER,
"username": proxy_username,
"password": params.PROXY_PASSWORD
}
return proxy
def recheck_the_captcha_error_contacts(store_type=0, mode: ModeEnum = ModeEnum.MANUAL):
# get all the contacts in captcha error
contact_list = params.local_db_manager.get_all_captcha_error_contacts()
with ThreadPoolExecutor(max_workers=10) as executor:
for errorContact in contact_list:
contact = ContactPojo.get_contact_from_error_contact(errorContact)
proxy = get_proxy()
# start the task in thread
executor.submit(
CommandorPage(contact, store_type=store_type, mode=mode).start_page,
proxy)
def get_proxy(proxy_type=ProxyType.BRIGHT_DATA):
return params.get_proxy(proxy_type)
if __name__ == '__main__':
# 修改联系人行,结束联系人行 第三个参数store等于0的时候是随机,传入1的时候是总店
start_book(16, 16, store_choose_state=0, proxy_type=0)
# start_book(16, 16, store_choose_state=0, proxy_type=0)
recheck_the_captcha_error_contacts(0, mode=ModeEnum.AUTOMATIC)
+3 -3
View File
@@ -21,15 +21,15 @@ class AcceptedResultPojo:
self.url = url
def get_accepted_result_from(sms, sim_info: ReserveResultPojo) -> AcceptedResultPojo:
def get_accepted_result_from(sim_info: ReserveResultPojo) -> AcceptedResultPojo:
if sim_info is None:
# send email even there are no reserve info
return AcceptedResultPojo(sms.text, slot_position=0, sim_position=0,
return AcceptedResultPojo("", slot_position=0, sim_position=0,
passport="", email="", phone="",
name="", ccid="",
url="")
else:
return AcceptedResultPojo(sms.text, slot_position=sim_info.slot_position, sim_position=sim_info.sim_position,
return AcceptedResultPojo("", slot_position=sim_info.slot_position, sim_position=sim_info.sim_position,
passport=sim_info.passport, email=sim_info.email, phone=sim_info.phone,
name="{} {}".format(sim_info.lastName, sim_info.firstName), ccid=sim_info.ccid,
url=sim_info.url)
+2 -2
View File
@@ -26,8 +26,8 @@ class Mailer:
aws_secret_access_key=secret)
def send_email(self, result: AcceptedResultPojo):
recipients = ['panleicim@gmail.com', 'kamenonly@gmail.com', 'tangliang0411@gmail.com']
# recipients = ['panleicim@gmail.com']
# recipients = ['panleicim@gmail.com', 'kamenonly@gmail.com', 'tangliang0411@gmail.com']
recipients = ['panleicim@gmail.com']
mytemplate = Template(filename=definitions.ROOT_DIR + "/templates/appointment_results.html")
self.logger.info("send email to " + str(recipients))
+36 -4
View File
@@ -1,8 +1,11 @@
import random
import string
import definitions
from db.DbManager import DataManager
from db.local_db_manager import LocalDbManager
from logs.LogSender import LogSender
from proxy.proxy_type import ProxyType
firebase_store_manager = DataManager()
oracle_log_sender = LogSender()
@@ -10,14 +13,41 @@ oracle_log_sender = LogSender()
# proxy
PROXY_SERVER = "http://gw.ntnt.io:5959"
PROXY_PASSWORD = "94sY7zwBG13i"
BRIGHT_DATA_PROXY_SERVER = "http://zproxy.lum-superproxy.io:22225"
BRIGHT_DATA_PROXY_USERNAME = "lum-customer-c_daabba94-zone-residential-country-fr"
BRIGHT_DATA_MOBILE_PROXY_USERNAME = "lum-customer-c_daabba94-zone-mobile-country-fr-city-paris-mobile"
BRIGHT_DATA_PROXY_PASSWORD = "9dwmh54u3bbh"
BRIGHT_DATA_MOBILE_PROXY_PASSWORD = "fk5f7c2z2c19"
PROXY_NAME_PREFIX_RES = "panleicim-res-fr-"
PROXY_NAME_PREFIX_CC = "panleicim-cc-fr-"
def get_proxy_name_prefix(proxy_type = 0) -> str:
if proxy_type ==0:
return PROXY_NAME_PREFIX_RES
def get_proxy_name_prefix() -> str:
return PROXY_NAME_PREFIX_RES
def get_proxy(proxy_type: ProxyType):
if proxy_type == ProxyType.NETNUT:
random_id_number = get_random_id_number_for_proxy()
proxy_username = get_proxy_name_prefix() + random_id_number
proxy = {
"server": PROXY_SERVER,
"username": proxy_username,
"password": PROXY_PASSWORD
}
else:
return PROXY_NAME_PREFIX_CC
proxy = {
"server": BRIGHT_DATA_PROXY_SERVER,
"username": BRIGHT_DATA_PROXY_USERNAME,
"password": BRIGHT_DATA_PROXY_PASSWORD
}
# proxy = {
# "server": BRIGHT_DATA_PROXY_SERVER,
# "username": BRIGHT_DATA_MOBILE_PROXY_USERNAME,
# "password": BRIGHT_DATA_MOBILE_PROXY_PASSWORD
# }
return proxy
def get_random_id_number_for_proxy() -> str:
@@ -28,6 +58,8 @@ def get_random_id_number_for_proxy() -> str:
return id_number
local_db_manager = LocalDbManager(definitions.home)
DEVICES = ['iPad (gen 6)', 'iPad (gen 6) landscape', 'iPad (gen 7)', 'iPad (gen 7) landscape', 'iPad Mini',
'iPad Mini landscape', 'iPad Pro 11', 'iPad Pro 11 landscape', 'iPhone 6', 'iPhone 6 landscape',
'iPhone 6 Plus', 'iPhone 6 Plus landscape', 'iPhone 7', 'iPhone 7 landscape', 'iPhone 7 Plus',
+23
View File
@@ -0,0 +1,23 @@
from sqlalchemy import Column, String, Integer, DateTime, func
from sqlalchemy.orm import declarative_base
Base = declarative_base()
ERROR_TYPE_CAPTCHA = 1
TOO_MANY_REQUEST_ERROR = 2
class ContactInErrorPojo(Base):
__tablename__ = "contacts_in_error"
id = Column(Integer, primary_key=True, autoincrement=True)
mail: str = Column(String)
phone: str = Column(String)
passport: str = Column(String)
last_name: str = Column(String)
first_name: str = Column(String)
ccid: str = Column(String)
position: int = Column(Integer)
error_type = Column(Integer)
update_at = Column(DateTime, onupdate=func.now())
create_at = Column(DateTime, default=func.now())
+8
View File
@@ -1,5 +1,7 @@
from dataclasses import dataclass
from pojo.captcha_error_contact_pojo import ContactInErrorPojo
@dataclass
class ContactPojo:
@@ -35,6 +37,12 @@ class ContactPojo:
return dest
@staticmethod
def get_contact_from_error_contact(errorContact: ContactInErrorPojo):
return ContactPojo(phone_number=errorContact.phone, mail=errorContact.mail, ccid=errorContact.ccid,
last_name=errorContact.last_name, first_name=errorContact.first_name,
position=errorContact.position, passport_number=errorContact.passport)
@staticmethod
def from_firestore_dict(source):
ccid = source['ccid']
View File
+6
View File
@@ -0,0 +1,6 @@
from enum import Enum
class ProxyType(Enum):
NETNUT = "NETNUT"
BRIGHT_DATA = "BRIGHT_DATA"
+4 -1
View File
@@ -9,4 +9,7 @@ boto3~=1.21.13
openpyxl==3.0.9
google-cloud-firestore==2.4.0
PySimpleGUI==4.60.0
SpeechRecognition==3.8.1
SpeechRecognition==3.8.1
SQLAlchemy~=1.4.37
requests~=2.27.1
Mako~=1.2.0
+9 -3
View File
@@ -55,6 +55,8 @@ class ExcelHelper:
name = raw_name.split(' ')
if len(name) == 1:
name = raw_name.split('\xa0')
if len(name) == 1:
print("error in " + str(name))
last_name = name[0]
if len(name) == 2:
first_name = name[-1]
@@ -86,10 +88,14 @@ def get_random_phone_numbers():
def generate_email_from_name(first_name: str, last_name: str) -> str:
length = 4 # number of characters in the string.
length = 2 # number of characters in the string.
ran = ''.join(random.choices(string.digits, k=length))
separator = ['.', '_', '']
email = "{}{}{}{}@163.com".format(last_name.lower(), random.choice(separator), first_name.lower(), ran)
domains = ['gmail.com', 'hotmail.com', 'yahoo.com', 'aol.com', 'outlook.com', 'hotmail.fr', 'gmx.com',
'hotmail.com', 'yahoo.com', 'aol.com', 'hotmail.com']
email = "{}{}{}{}@{}".format(last_name.lower(), random.choice(separator),
first_name.replace("-", "").replace("'", "").lower(), ran,
random.choice(domains))
print(email)
return email
@@ -130,6 +136,6 @@ def write_new_contacts_to_excel(valid_contacts: list):
if __name__ == '__main__':
excel_reader = ExcelHelper()
contacts = excel_reader.read_names("C:/Users/landd/Desktop/rdv/08-06/500_08_06.xlsx")
contacts = excel_reader.read_names("C:/Users/landd/Desktop/rdv/08-06/500.xlsx")
print(contacts)
write_new_contacts_to_excel(valid_contacts=contacts)
+21 -4
View File
@@ -1,8 +1,13 @@
import random
import string
letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'P', 'Q', 'R', 'S', 'T', '1', '2', '3', '4', '5', '6', '7',
'8', '9']
# letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'P', 'Q', 'R', 'S', 'T', '1', '2', '3', '4', '5', '6', '7',
# '8', '9']
from pojo.captcha_error_contact_pojo import ContactInErrorPojo
from pojo.contact_pojo import ContactPojo
letters = ['E', 'G', 'M']
def get_random_id_number() -> str:
@@ -13,12 +18,24 @@ def get_random_id_number() -> str:
# 产生中国护照号
def get_random_passport_id_number() -> str:
S = 7 # number of characters in the string.
S = 8 # number of characters in the string.
ran = ''.join(random.choices(string.digits, k=S))
id_number = "E" + random.choice(letters) + str(ran)
id_number = random.choice(letters) + str(ran)
return id_number
def get_captcha_error_contact_from_contact(contact: ContactPojo, error_type: int) -> ContactInErrorPojo:
captcha_error = ContactInErrorPojo()
captcha_error.mail = contact.mail
captcha_error.ccid = contact.ccid
captcha_error.phone = contact.phone
captcha_error.passport = contact.passport
captcha_error.first_name = contact.first_name
captcha_error.last_name = contact.last_name
captcha_error.position = contact.position
captcha_error.error_type = error_type
return captcha_error
if __name__ == '__main__':
# for i in range(1,200):
# print(get_random_id_number())
+19
View File
@@ -0,0 +1,19 @@
import json
import requests
def generate_names() -> list:
res = requests.get(
"https://www.namegeneratorfun.com/api/namegenerator?generatorType=list&firstName=&lastName=&minLength=0&maxLength=255&sexId=2&generatorId=43")
response_json = json.loads(res.text)
names = response_json['names']
# print(names)
return names
if __name__ == '__main__':
for i in range(0, 500):
names = generate_names()
for name in names:
print(name)
Binary file not shown.
+16 -24
View File
@@ -7,12 +7,14 @@ import time
from typing import Union
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.captcha_error_contact_pojo import ERROR_TYPE_CAPTCHA, \
TOO_MANY_REQUEST_ERROR
from pojo.contact_pojo import ContactPojo
from proxy.proxy_type import ProxyType
from utils.generate_random_passport_id import get_captcha_error_contact_from_contact
from workers.SolveCaptch import SolveCaptcha
RDV_URL = "https://rendezvousparis.hermes.com/client/register"
@@ -30,7 +32,7 @@ CONFIRMED_MESSAGE_FR = "Votre demande de rendez-vous Maroquinerie a bien été e
DOUBLE_REQUEST_ERROR_MESSAGE = "A request with the same data has already been validated today."
DOUBLE_REQUEST_ERROR_MESSAGE_FR = "Une demande avec les données saisies a déjà été validée aujourdhui."
TOO_MANY_REQUEST_ERROR_MESSAGE = "Due to a large number of requests"
TOO_MANY_REQUEST_ERROR_MESSAGE_FR = "Suite à un trop grand nombre de demandes aujourdhui,"
TOO_MANY_REQUEST_ERROR_MESSAGE_FR = "Suite à un trop grand nombre de demandes"
CAPTCHA_ERROR_MESSAGE = "Error verifying captcha, please try again"
CAPTCHA_ERROR_MESSAGE_FR = "La vérification du captcha a échoué"
TIME_OUT = 400000
@@ -51,7 +53,8 @@ class Tls(threading.local):
class CommandorPage:
tls = Tls()
def __init__(self, contact: ContactPojo, store_type=0, proxy_type=0, mode: ModeEnum = ModeEnum.MANUAL):
def __init__(self, contact: ContactPojo, store_type=0, proxy_type=ProxyType.BRIGHT_DATA,
mode: ModeEnum = ModeEnum.MANUAL):
self.otp_value = None
self.logger = logging.getLogger("约会页面:" + str(contact.phone))
self.is_finished = False
@@ -96,13 +99,7 @@ class CommandorPage:
first_page = None
while first_page is None:
first_page = self.start_browser(proxy, self.tls.playwright, devices)
proxy_username = params.get_proxy_name_prefix(self.proxy_type) + params.get_random_id_number_for_proxy()
self.logger.info("proxy_username is " + proxy_username)
proxy = {
"server": params.PROXY_SERVER,
"username": proxy_username,
"password": params.PROXY_PASSWORD
}
proxy = params.get_proxy(self.proxy_type)
# wait for sms_code field
# self.clickOnValidBtn()
self.thread_event = e
@@ -132,7 +129,7 @@ class CommandorPage:
self.logger.info("填充信息: " + str(self.contact.phone))
self._set_name(self.contact.last_name, self.contact.first_name)
self._setPhoneCountryAndStore()
self._setPhoneNumber(self.contact.phone)
self._setPhoneNumber("0" + str(self.contact.phone))
self._set_email(self.contact.mail)
self.setIdNumber(self.contact.passport)
self._checkCgu()
@@ -259,6 +256,8 @@ class CommandorPage:
elif TOO_MANY_REQUEST_ERROR_MESSAGE in erro_content or TOO_MANY_REQUEST_ERROR_MESSAGE_FR in erro_content:
# this email has been already used
if not self.is_finished:
params.local_db_manager.insert_or_update(
get_captcha_error_contact_from_contact(self.contact, TOO_MANY_REQUEST_ERROR))
params.oracle_log_sender.send_too_many_error(self.contact)
self.is_finished = True
self.termine()
@@ -266,6 +265,9 @@ class CommandorPage:
# this email has been already used
self.is_captcha_in_error = True
if not self.is_finished:
# save the error to database with contact info
params.local_db_manager.insert_or_update(
get_captcha_error_contact_from_contact(self.contact, ERROR_TYPE_CAPTCHA))
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
@@ -312,9 +314,6 @@ class CommandorPage:
except Exception as error:
self.logger.error(error)
def clear_app_data(self):
pass
def fill_otp(self, otp: str):
self.page.focus(OTP_FIELD_ID)
time.sleep(get_random_wait_time())
@@ -334,6 +333,7 @@ class CommandorPage:
result.id = id
result.store_type = self.store_type
params.firebase_store_manager.save(result)
params.local_db_manager.handle_success(result)
if status is PublishType.SUCCESS:
self.on_success(result)
time.sleep(2)
@@ -376,20 +376,12 @@ def on_success(result: ReserveResultPojo):
def launch_page():
PROXY_USERNAME = "panleicim-res-fr-" + params.get_random_id_number_for_proxy()
print("proxy_username is " + PROXY_USERNAME)
proxy = {
"server": PROXY_SERVER,
"username": PROXY_USERNAME,
"password": PROXY_PASSWORD
}
passport_number = get_random_id_number()
print("passport_number is " + passport_number)
contact = ContactPojo(phone_number="+33758912245", passport_number=passport_number, last_name="XU",
first_name="xingzhen",
mail="ColbyPatel653@gmail.com", ccid="", position=0)
page = CommandorPage(contact, store_type=1)
return page.start_page(None)
return page.start_page(params.get_proxy())
def wait_for_otp(event: threading.Event, commandor: CommandorPage):