add locker for page reload

This commit is contained in:
PAN Lei
2022-05-25 23:18:32 +02:00
parent cecd7f4452
commit d5c16fbd7b
+23 -14
View File
@@ -48,11 +48,13 @@ class CommandorPage:
def __init__(self, contact: ContactPojo, store_type=0, proxy_type=0): def __init__(self, contact: ContactPojo, store_type=0, proxy_type=0):
self.otp_value = None self.otp_value = None
self.logger = logging.getLogger("CommandorPage") self.logger = logging.getLogger("CommandorPage:" + str(contact.phone))
self.is_finished = False self.is_finished = False
self.contact = contact self.contact = contact
self.proxy_type = proxy_type self.proxy_type = proxy_type
self.is_evnet_sent = False self.is_event_sent = False
self.is_captcha_in_error = False
self.is_filling_fields = False
# 0: random # 0: random
# 1: faubourg # 1: faubourg
# 2: George # 2: George
@@ -66,12 +68,12 @@ class CommandorPage:
def on_success(self, result: ReserveResultPojo): def on_success(self, result: ReserveResultPojo):
self.logger.info("on_success called.") self.logger.info("on_success called.")
if not self.is_evnet_sent: self.is_finished = True
if not self.is_event_sent:
self.logger.info("will send successful event") self.logger.info("will send successful event")
self.logger.info(result) self.logger.info(result)
params.oracle_log_sender.send_appoint_result(result) params.oracle_log_sender.send_appoint_result(result)
self.is_evnet_sent = True self.is_event_sent = True
self.is_finished = True
def timeout_occurred(self): def timeout_occurred(self):
params.oracle_log_sender.send_timeout_log(self.contact) params.oracle_log_sender.send_timeout_log(self.contact)
@@ -95,7 +97,6 @@ class CommandorPage:
"username": proxy_username, "username": proxy_username,
"password": params.PROXY_PASSWORD "password": params.PROXY_PASSWORD
} }
# self.fill_fields()
# wait for sms_code field # wait for sms_code field
# self.clickOnValidBtn() # self.clickOnValidBtn()
self.thread_event = e self.thread_event = e
@@ -109,7 +110,6 @@ class CommandorPage:
self.clickOnValidBtn() self.clickOnValidBtn()
otp_sent = self.page.locator(MESSAGE_FIELD_CLASS) otp_sent = self.page.locator(MESSAGE_FIELD_CLASS)
otp_sent.wait_for(state='visible', timeout=TIME_OUT) otp_sent.wait_for(state='visible', timeout=TIME_OUT)
# print("message is:" + message)
time.sleep(get_random_wait_time()) time.sleep(get_random_wait_time())
message = self.page.content() message = self.page.content()
if CONFIRMED_MESSAGE in message: if CONFIRMED_MESSAGE in message:
@@ -121,15 +121,17 @@ class CommandorPage:
self.termine() self.termine()
def fill_fields(self): def fill_fields(self):
if not self.is_filling_fields:
self.is_filling_fields = True
self.logger.info("will call fill_fields for " + str(self.contact.phone)) self.logger.info("will call fill_fields for " + str(self.contact.phone))
self._set_name(self.contact.last_name, self.contact.first_name) self._set_name(self.contact.last_name, self.contact.first_name)
self._setPhoneCountryAndStore() self._setPhoneCountryAndStore()
self._setPhoneNumber(self.contact.phone) self._setPhoneNumber(self.contact.phone)
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() self.resolve_captcha()
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]:
try: try:
@@ -162,7 +164,7 @@ class CommandorPage:
pattern = re.compile(REGEX_RDV_URL) pattern = re.compile(REGEX_RDV_URL)
if pattern.match(response.url): if pattern.match(response.url):
self.logger.info("result url found: " + response.url) self.logger.info("result url found: " + response.url)
self.publish_message_to_queue(self.contact, PublishType.PENDING, response.url) # self.publish_message_to_queue(self.contact, PublishType.PENDING, response.url)
def start_page(self, proxy): def start_page(self, proxy):
e = threading.Event() e = threading.Event()
@@ -181,7 +183,7 @@ class CommandorPage:
self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url) self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url)
self.get_errors() self.get_errors()
except Exception as error: except Exception as error:
print(error) self.logger.error(error)
def on_document_loaded(self): def on_document_loaded(self):
self.logger.info("on_document_loaded called") self.logger.info("on_document_loaded called")
@@ -231,7 +233,7 @@ class CommandorPage:
items = self.page.query_selector("div.alert") items = self.page.query_selector("div.alert")
if items: if items:
erro_content = items.inner_html() erro_content = items.inner_html()
print("错误:" + erro_content) self.logger.info("错误:" + erro_content)
self._handle_errors(erro_content) self._handle_errors(erro_content)
except Exception as ext: except Exception as ext:
self.logger.error(ext) self.logger.error(ext)
@@ -250,9 +252,12 @@ class CommandorPage:
self.browser.close() 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
params.oracle_log_sender.send_captcha_error(self.contact) params.oracle_log_sender.send_captcha_error(self.contact)
# self.page.reload(timeout=PAGE_TIMEOUT) # no need to retry captcha, if retry ,will generate DOUBLE_REQUEST_ERROR_MESSAGE
self.resolve_captcha() time.sleep(2)
self.browser.close()
# self.resolve_captcha()
def _set_email(self, email): def _set_email(self, email):
time.sleep(get_random_wait_time()) time.sleep(get_random_wait_time())
@@ -332,10 +337,14 @@ class CommandorPage:
self.clickOnValidBtn() self.clickOnValidBtn()
# wait for 20s # wait for 20s
time.sleep(20) time.sleep(20)
if not self.is_finished:
if not self.is_captcha_in_error:
self.clickOnValidBtn() self.clickOnValidBtn()
else:
self.is_captcha_in_error = False
except Exception as error: except Exception as error:
print(error) self.logger.error(error)
self.page.reload(timeout=PAGE_TIMEOUT) self.page.reload(timeout=PAGE_TIMEOUT)