import random from enum import Enum from typing import Union from playwright.sync_api import sync_playwright import params from commandor_page import get_random_id_number_for_proxy from logs.LogSender import TYPE_EVENT_CHECK_RESULTS, LOG_SUBJECT_EVENT from pojo.ReserveResultPojo import ReserveResultPojo from utils.excel_reader import ExcelHelper SORRY_SENTENCE = "nous sommes sincèrement désolés de n'avoir pu vous satisfaire cette fois-ci" PENDING_SENTENCE = "Ce soir, entre 20:00 et 20:30, vous obtiendrez une réponse par e-mail." user_agent_list = ExcelHelper().read_user_agent_list() class ResultEnum(Enum): ACCEPTED = "ACCEPTED" REFUSED = "REFUSED" PENDING = "PENDING" # check result with playright def check_result_page(url) -> ResultEnum: with sync_playwright() as p: return run(p, url) def run(playwright, url) -> ResultEnum: browser = playwright.firefox.launch(headless=False) url_to_check = url.replace("register/", "") url_to_check = url_to_check + "?lang=fr" content = None while content is None: content = load_page(browser, url_to_check) print(content) browser.close() if SORRY_SENTENCE in content: print("status is REFUSED") return ResultEnum.REFUSED elif PENDING_SENTENCE in content: print("status is PENDING") return ResultEnum.PENDING else: print("status is ACCEPTED") return ResultEnum.ACCEPTED def load_page(browser, url) -> Union[str, None]: try: PROXY_USERNAME = "panleicim-cc-fr-sid-" + get_random_id_number_for_proxy() proxy = { "server": params.PROXY_SERVER, "username": PROXY_USERNAME, "password": params.PROXY_PASSWORD } firefox_user_agents = filter(lambda user_agent: "firefox" in user_agent.lower(), user_agent_list) firefox_user_agents_list = list(firefox_user_agents) user_agent = random.choice(firefox_user_agents_list) page = browser.new_page( user_agent=user_agent, proxy=proxy) page.add_init_script("""() => Object.defineProperty(navigator,'webdriver',{get: () => undefined}""") page.goto(url, timeout=90000) return page.content() except Exception as error: print(error) return None # need to start at 21h00 if __name__ == '__main__': # get the list params.oracle_log_sender.send_log(msg="开始检查约会结果", subject=LOG_SUBJECT_EVENT, type=TYPE_EVENT_CHECK_RESULTS) db_manager = params.firebase_store_manager collection = db_manager.get_all_successful_items() count = 0 for appointment in collection.stream(): count = count + 1 reserve_pojo = ReserveResultPojo.from_firestore_dict(appointment.to_dict()) if reserve_pojo.accepted: print("status is " + reserve_pojo.accepted) if reserve_pojo.accepted is None: # or ResultEnum.PENDING.value == reserve_pojo.accepted: result = check_result_page(reserve_pojo.url) collection.document(reserve_pojo.id).update({u'accepted': result.name}) print(count)