can retry the contacts in error
This commit is contained in:
+15
-5
@@ -1,7 +1,7 @@
|
||||
import PySimpleGUI as sg
|
||||
|
||||
# First the window layout in 2 columns
|
||||
from main import start_book
|
||||
from main import start_book, recheck_the_captcha_error_contacts
|
||||
from pojo.ModeEnum import ModeEnum
|
||||
from proxy.proxy_type import ProxyType
|
||||
|
||||
@@ -20,13 +20,15 @@ KEY_MANUAL = "KEY_MANUAL"
|
||||
GROUP_MODE = "GROUP_MODE"
|
||||
GROUP_STORE = "STORE"
|
||||
GROUP_PROXY = "GROUP_PROXY"
|
||||
KEY_RUN_ERROR_CONTACT = "KEY_RUN_ERROR_CONTACT"
|
||||
|
||||
file_list_column = [
|
||||
[sg.Text('请输入联系人表的起始和结束行')],
|
||||
[sg.Text('起始行', size=(15, 1)), sg.InputText(tooltip="起始行", key=KEY_START_NUMBER)],
|
||||
[sg.Text('结束行', size=(15, 1)), sg.InputText(tooltip="结束行", key=KEY_END_NUMBER)],
|
||||
[sg.Text('并发数', size=(15, 1)), sg.InputText(tooltip="结束行", key=KEY_MAX_WORKERS, default_text=10)],
|
||||
[sg.Submit(button_text="运行", key="submit")]
|
||||
[sg.Submit(button_text="运行", key="submit")],
|
||||
[sg.Submit(button_text="重约发生错误的约会", key=KEY_RUN_ERROR_CONTACT)]
|
||||
]
|
||||
# For now will only show the name of the file that was chosen
|
||||
store_settings_column = [
|
||||
@@ -59,14 +61,16 @@ layout = [
|
||||
|
||||
window = sg.Window("爱马仕约会", layout)
|
||||
|
||||
|
||||
def on_no_contact_found():
|
||||
sg.popup("对应联系人列表为空")
|
||||
|
||||
|
||||
while True:
|
||||
event, values = window.read()
|
||||
print(event)
|
||||
print(values)
|
||||
if event == "submit":
|
||||
# try:
|
||||
start_line = int(values[KEY_START_NUMBER])
|
||||
end_line = int(values[KEY_END_NUMBER])
|
||||
max_workers = int(values[KEY_MAX_WORKERS])
|
||||
store_type = 0
|
||||
mode = ModeEnum.MANUAL
|
||||
@@ -85,8 +89,14 @@ while True:
|
||||
|
||||
if values[KEY_AUTOMATIC]:
|
||||
mode = ModeEnum.AUTOMATIC
|
||||
if event == "submit":
|
||||
start_line = int(values[KEY_START_NUMBER])
|
||||
end_line = int(values[KEY_END_NUMBER])
|
||||
start_book(start_line, end_line, store_choose_state=store_type, max_workers=max_workers, proxy_type=proxy_type,
|
||||
mode=mode)
|
||||
elif event == KEY_RUN_ERROR_CONTACT:
|
||||
recheck_the_captcha_error_contacts(max_workers=max_workers, store_type=store_type, mode=mode,
|
||||
on_no_contact_found=on_no_contact_found)
|
||||
|
||||
elif event == "Exit" or event == sg.WIN_CLOSED:
|
||||
break
|
||||
|
||||
@@ -5,7 +5,6 @@ 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
|
||||
@@ -49,15 +48,8 @@ class LocalDbManager:
|
||||
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)
|
||||
|
||||
+35
-2
@@ -1,9 +1,12 @@
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
from pymongo import MongoClient
|
||||
from pojo.ReserveResultPojo import ReserveResultPojo
|
||||
from pojo.contact_pojo import ContactPojo
|
||||
|
||||
MONGO_DB_URL = "91.121.210.60"
|
||||
MONGO_DB_URL = "mongo.lpaconsulting.fr"
|
||||
CAPTCHA_ERROR_COLLECTION_PREFIX = "CAPTCHA_ERROR_"
|
||||
|
||||
|
||||
class MongoDbManager:
|
||||
@@ -22,8 +25,38 @@ class MongoDbManager:
|
||||
collection_to_use.replace_one(filter={'_id': reserve.id, }, replacement=reserve.to_firestore_dict(),
|
||||
upsert=True)
|
||||
except Exception as Error:
|
||||
print(Error)
|
||||
self.logger.info(Error)
|
||||
|
||||
def insert_captcha_error_contact(self, contact: ContactPojo):
|
||||
day = str(datetime.date.today())
|
||||
collection_name = CAPTCHA_ERROR_COLLECTION_PREFIX + day
|
||||
try:
|
||||
collection_to_use = self.db[collection_name]
|
||||
collection_to_use.replace_one(filter={'_id': contact.mail, }, replacement=contact.to_firestore_dict(),
|
||||
upsert=True)
|
||||
except Exception as error:
|
||||
self.logger.info(error)
|
||||
|
||||
def get_captcha_error_contacts_for_current_day(self) -> list:
|
||||
day = str(datetime.date.today())
|
||||
collection_name = CAPTCHA_ERROR_COLLECTION_PREFIX + day
|
||||
cursor = self.db[collection_name]
|
||||
contact_list = []
|
||||
for document in cursor.find():
|
||||
contact_list.append(ContactPojo.from_firestore_dict(document))
|
||||
return contact_list
|
||||
|
||||
def delete_captcha_error_contact_for_current_day(self, contact: ContactPojo):
|
||||
day = str(datetime.date.today())
|
||||
collection_name = CAPTCHA_ERROR_COLLECTION_PREFIX + day
|
||||
collection = self.db[collection_name]
|
||||
to_delete = {'_id': contact.mail}
|
||||
try:
|
||||
collection.delete_one(to_delete)
|
||||
except Exception as error:
|
||||
self.logger.info(error)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
db_manager = MongoDbManager()
|
||||
print(db_manager.get_captcha_error_contacts_for_current_day())
|
||||
|
||||
@@ -34,10 +34,13 @@ def start_book(start_number, end_number, store_choose_state=0, max_workers=10, p
|
||||
proxy)
|
||||
|
||||
|
||||
def recheck_the_captcha_error_contacts(store_type=0, mode: ModeEnum = ModeEnum.MANUAL):
|
||||
def recheck_the_captcha_error_contacts(on_no_contact_found, store_type=0, mode: ModeEnum = ModeEnum.MANUAL,
|
||||
max_workers=10):
|
||||
# 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:
|
||||
contact_list = params.mongo_store_manager.get_captcha_error_contacts_for_current_day()
|
||||
if len(contact_list) == 0:
|
||||
on_no_contact_found()
|
||||
with ThreadPoolExecutor(max_workers=max_workers) as executor:
|
||||
for errorContact in contact_list:
|
||||
contact = ContactPojo.get_contact_from_error_contact(errorContact)
|
||||
proxy = get_proxy()
|
||||
@@ -54,4 +57,4 @@ def get_proxy(proxy_type=ProxyType.BRIGHT_DATA):
|
||||
if __name__ == '__main__':
|
||||
# 修改联系人行,结束联系人行 第三个参数store等于0的时候是随机,传入1的时候是总店
|
||||
# start_book(16, 16, store_choose_state=0, proxy_type=0)
|
||||
recheck_the_captcha_error_contacts(0, mode=ModeEnum.AUTOMATIC)
|
||||
recheck_the_captcha_error_contacts(store_type=0, mode=ModeEnum.AUTOMATIC, on_no_contact_found=lambda: None)
|
||||
|
||||
+13
-17
@@ -127,9 +127,9 @@ class CommandorPage:
|
||||
self.logger.info("填充信息: " + str(self.contact.phone))
|
||||
self._set_name(self.contact.last_name, self.contact.first_name)
|
||||
self._setPhoneCountryAndStore()
|
||||
self._setPhoneNumber("0" + str(self.contact.phone))
|
||||
self._set_phone_number("0" + str(self.contact.phone))
|
||||
self._set_email(self.contact.mail)
|
||||
self.setIdNumber(self.contact.passport)
|
||||
self._set_id_number(self.contact.passport)
|
||||
self._checkCgu()
|
||||
if self.appointment_mode == ModeEnum.AUTOMATIC:
|
||||
self.resolve_captcha()
|
||||
@@ -205,7 +205,7 @@ class CommandorPage:
|
||||
except Exception as error:
|
||||
self.logger.error(error)
|
||||
|
||||
def _setPhoneNumber(self, phoneNumber):
|
||||
def _set_phone_number(self, phoneNumber):
|
||||
time.sleep(get_random_wait_time())
|
||||
try:
|
||||
self.page.evaluate("""(phoneNumber)=>document.getElementById("phone_number").value =phoneNumber""",
|
||||
@@ -264,9 +264,7 @@ class CommandorPage:
|
||||
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.handle_captcha_error()
|
||||
self.is_finished = True
|
||||
# no need to retry captcha, if retry ,will generate DOUBLE_REQUEST_ERROR_MESSAGE
|
||||
self.termine()
|
||||
@@ -283,7 +281,7 @@ class CommandorPage:
|
||||
except Exception as error:
|
||||
self.logger.error(error)
|
||||
|
||||
def setIdNumber(self, id):
|
||||
def _set_id_number(self, id):
|
||||
time.sleep(get_random_wait_time())
|
||||
try:
|
||||
self.page.evaluate(""" (id) =>{
|
||||
@@ -332,6 +330,7 @@ class CommandorPage:
|
||||
result.store_type = self.store_type
|
||||
params.firebase_store_manager.save(result)
|
||||
params.local_db_manager.handle_success(result)
|
||||
params.mongo_store_manager.delete_captcha_error_contact_for_current_day(self.contact)
|
||||
if status is PublishType.SUCCESS:
|
||||
self.on_success(result)
|
||||
time.sleep(2)
|
||||
@@ -360,13 +359,11 @@ class CommandorPage:
|
||||
self.logger.error(error)
|
||||
self.page.reload(timeout=PAGE_TIMEOUT)
|
||||
|
||||
|
||||
def get_random_id_number() -> str:
|
||||
S = 8 # number of characters in the string.
|
||||
ran = ''.join(random.choices(string.digits, k=S))
|
||||
id_number = "57" + str(ran)
|
||||
print("The randomly generated string is : 94" + str(ran)) # print the random data
|
||||
return id_number
|
||||
def handle_captcha_error(self):
|
||||
params.local_db_manager.insert_or_update(
|
||||
get_captcha_error_contact_from_contact(self.contact, ERROR_TYPE_CAPTCHA))
|
||||
params.mongo_store_manager.insert_captcha_error_contact(self.contact)
|
||||
params.oracle_log_sender.send_captcha_error(self.contact)
|
||||
|
||||
|
||||
def on_success(result: ReserveResultPojo):
|
||||
@@ -374,12 +371,11 @@ def on_success(result: ReserveResultPojo):
|
||||
|
||||
|
||||
def launch_page():
|
||||
passport_number = get_random_id_number()
|
||||
contact = ContactPojo(phone_number="+33758912245", passport_number=passport_number, last_name="XU",
|
||||
contact = ContactPojo(phone_number="+33758912245", passport_number="82546975", last_name="XU",
|
||||
first_name="xingzhen",
|
||||
mail="ColbyPatel653@gmail.com", ccid="", position=0)
|
||||
page = CommandorPage(contact, store_type=1)
|
||||
return page.start_page(params.get_proxy())
|
||||
return page.start_page(params.get_proxy(ProxyType.BRIGHT_DATA))
|
||||
|
||||
|
||||
def wait_for_otp(event: threading.Event, commandor: CommandorPage):
|
||||
|
||||
Reference in New Issue
Block a user