diff --git a/workers/commandor_page.py b/workers/commandor_page.py index 3a9eaa9..48f4bbb 100644 --- a/workers/commandor_page.py +++ b/workers/commandor_page.py @@ -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): - 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() + 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) - self.clickOnValidBtn() + 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)