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):
self.otp_value = None
self.logger = logging.getLogger("CommandorPage")
self.logger = logging.getLogger("CommandorPage:" + str(contact.phone))
self.is_finished = False
self.contact = contact
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
# 1: faubourg
# 2: George
@@ -66,12 +68,12 @@ class CommandorPage:
def on_success(self, result: ReserveResultPojo):
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(result)
params.oracle_log_sender.send_appoint_result(result)
self.is_evnet_sent = True
self.is_finished = True
self.is_event_sent = True
def timeout_occurred(self):
params.oracle_log_sender.send_timeout_log(self.contact)
@@ -95,7 +97,6 @@ class CommandorPage:
"username": proxy_username,
"password": params.PROXY_PASSWORD
}
# self.fill_fields()
# wait for sms_code field
# self.clickOnValidBtn()
self.thread_event = e
@@ -109,7 +110,6 @@ class CommandorPage:
self.clickOnValidBtn()
otp_sent = self.page.locator(MESSAGE_FIELD_CLASS)
otp_sent.wait_for(state='visible', timeout=TIME_OUT)
# print("message is:" + message)
time.sleep(get_random_wait_time())
message = self.page.content()
if CONFIRMED_MESSAGE in message:
@@ -121,15 +121,17 @@ class CommandorPage:
self.termine()
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._set_name(self.contact.last_name, self.contact.first_name)
self._setPhoneCountryAndStore()
self._setPhoneNumber(self.contact.phone)
self._set_email(self.contact.mail)
self.setIdNumber(self.contact.passport)
#
self._checkCgu()
self.resolve_captcha()
self.is_filling_fields = False
def start_browser(self, proxy, pwright, device) -> Union[str, None]:
try:
@@ -162,7 +164,7 @@ class CommandorPage:
pattern = re.compile(REGEX_RDV_URL)
if pattern.match(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):
e = threading.Event()
@@ -181,7 +183,7 @@ class CommandorPage:
self.publish_message_to_queue(self.contact, PublishType.SUCCESS, self.page.url)
self.get_errors()
except Exception as error:
print(error)
self.logger.error(error)
def on_document_loaded(self):
self.logger.info("on_document_loaded called")
@@ -231,7 +233,7 @@ class CommandorPage:
items = self.page.query_selector("div.alert")
if items:
erro_content = items.inner_html()
print("错误:" + erro_content)
self.logger.info("错误:" + erro_content)
self._handle_errors(erro_content)
except Exception as ext:
self.logger.error(ext)
@@ -250,9 +252,12 @@ class CommandorPage:
self.browser.close()
elif CAPTCHA_ERROR_MESSAGE in erro_content:
# this email has been already used
self.is_captcha_in_error = True
params.oracle_log_sender.send_captcha_error(self.contact)
# self.page.reload(timeout=PAGE_TIMEOUT)
self.resolve_captcha()
# no need to retry captcha, if retry ,will generate DOUBLE_REQUEST_ERROR_MESSAGE
time.sleep(2)
self.browser.close()
# self.resolve_captcha()
def _set_email(self, email):
time.sleep(get_random_wait_time())
@@ -332,10 +337,14 @@ class CommandorPage:
self.clickOnValidBtn()
# wait for 20s
time.sleep(20)
if not self.is_finished:
if not self.is_captcha_in_error:
self.clickOnValidBtn()
else:
self.is_captcha_in_error = False
except Exception as error:
print(error)
self.logger.error(error)
self.page.reload(timeout=PAGE_TIMEOUT)