def get_screenshot_documentation_from_links(self, set_of_links: set, domain: str, driver: webdriver, dictionary_path: str) -> dict: driver = driver driver.set_page_load_timeout(30) incorrect_status_code = {} for link in set_of_links: response = requests.get(link) status = str(response.status_code) print("Link: ", link, "\t\t\t\t\tStatus code: ", status) driver.get(link) name = link.replace(str(domain), "").replace("/", "_") self.get_screenshot(name=name, driver=driver, dictionary_path=dictionary_path) if status[0] in ["4", "3", "5"]: incorrect_status_code[link] = status return incorrect_status_code
def get_tabelog_ranking(driver: webdriver, area: str, keyword: str): result = list() driver.get(TABELOG_URL) driver.set_page_load_timeout(TIMEOUT) sleep(1) driver.find_element_by_xpath(AREA_FORM_XPATH).send_keys(area) driver.find_element_by_xpath(KEYWORD_FORM_XPATH).send_keys(keyword) driver.find_element_by_xpath(SEARCH_BTN_XPATH).click() driver.set_page_load_timeout(TIMEOUT) sleep(1) driver.find_elements_by_class_name(RANKING_BTN_CSS)[0].click() driver.set_page_load_timeout(TIMEOUT) sleep(1) ranking = driver.find_elements_by_class_name(RANKING_LIST_CSS) ranking_star = driver.find_elements_by_class_name(RANKING_STAR_LIST_CSS) for index, shop in enumerate(ranking): if hasattr(shop, "text"): newShop = ShopInfo() newShop.name = shop.text newShop.rank = index + 1 newShop.star = ranking_star[index].text result.append(newShop) return result
def cycle_cita(driver: webdriver, context: CustomerProfile): driver.delete_all_cookies() try: driver.execute_script("window.localStorage.clear();") driver.execute_script("window.sessionStorage.clear();") except Exception as e: logging.error(e) pass fast_forward_url = "https://sede.administracionespublicas.gob.es/icpplustieb/acInfo?p={}&tramite={}".format( context.province, context.operation_code ) while True: try: driver.set_page_load_timeout(300 if context.first_load else 50) driver.get(fast_forward_url) except TimeoutException: speaker.say("ATTENTION") logging.error("Timed out loading initial page") # TODO add speaker continue break context.first_load = False session_id = driver.get_cookie("JSESSIONID").get("value") logging.info(session_id) # 3. Instructions page: try: WebDriverWait(driver, DELAY).until(EC.presence_of_element_located((By.ID, "btnEntrar"))) except TimeoutException: logging.error("Timed out waiting for Instructions page to load") return None btn = driver.find_element_by_id("btnEntrar") btn.send_keys(Keys.ENTER) # 4. Data form: success = False if context.operation_code == OperationType.TOMA_HUELLAS: success = toma_huellas_step2(driver, context) elif context.operation_code == OperationType.RECOGIDA_DE_TARJETA: success = recogida_de_tarjeta_step2(driver, context) elif context.operation_code == OperationType.SOLICITUD: success = solicitud_step2(driver, context) elif context.operation_code == OperationType.BREXIT: success = brexit_step2(driver, context) elif context.operation_code == OperationType.CERTIFICADOS_UE: success = certificados_ue_step2(driver, context) elif context.operation_code == OperationType.AUTORIZACION_DE_REGRESO: success = autorizacion_de_regreso_step2(driver, context) elif context.operation_code == OperationType.FAMILIARES_RESIDENTES: success = familiares_residentes(driver, context) if not success: return None try: wait_exact_time(driver, context) except TimeoutException: logging.error("Timed out waiting for exact time") return None # 5. Solicitar cita: solcitar = solicitar_cita(driver, context) # TODO need to fix or is catalan? if solcitar is None: return None # 6. phone-mail: return phone_mail(driver, context)
def cycle_cita(driver: webdriver, context: CustomerProfile): driver.delete_all_cookies() try: driver.execute_script("window.localStorage.clear();") driver.execute_script("window.sessionStorage.clear();") except Exception as e: logging.error(e) pass if context.fast_forward_url: while True: try: driver.set_page_load_timeout(300 if context.first_load else 50) driver.get(context.fast_forward_url) except TimeoutException: logging.error("Timed out loading initial page") continue break context.first_load = False session_id = driver.get_cookie("JSESSIONID").get("value") logging.info(session_id) else: driver.get( "https://sede.administracionespublicas.gob.es/icpplus/index.html") time.sleep(1) # Let the user actually see something! # Select "Barcelona" select = Select(driver.find_element_by_id("form")) select.select_by_visible_text(context.city) btn = driver.find_element_by_id("btnAceptar") btn.send_keys(Keys.ENTER) # 2. Tramite selection: try: WebDriverWait(driver, DELAY).until( EC.presence_of_element_located((By.ID, "tramiteGrupo[1]"))) except TimeoutException: logging.error("Timed out waiting for tramite to load") return None select = Select(driver.find_element_by_id("tramiteGrupo[1]")) # Select "Huellos" select.select_by_value(context.operation_code.value) btn = driver.find_element_by_id("btnAceptar") btn.send_keys(Keys.ENTER) # 3. Instructions page: try: WebDriverWait(driver, DELAY).until( EC.presence_of_element_located((By.ID, "btnEntrar"))) except TimeoutException: logging.error("Timed out waiting for Instructions page to load") return None btn = driver.find_element_by_id("btnEntrar") btn.send_keys(Keys.ENTER) # 4. Data form: success = False if context.operation_code == OperationType.TOMA_HUELLAS: success = toma_huellas_step2(driver, context) elif context.operation_code == OperationType.RECOGIDA_DE_TARJETA: success = recogida_de_tarjeta_step2(driver, context) elif context.operation_code == OperationType.SOLICITUD: success = solicitud_step2(driver, context) if not success: return None try: wait_exact_time(driver, context) except TimeoutException: logging.error("Timed out waiting for exact time") return None # 5. Solicitar cita: btn = driver.find_element_by_id("btnEnviar") btn.send_keys(Keys.ENTER) for i in range(REFRESH_PAGE_CYCLES): try: WebDriverWait(driver, DELAY).until( EC.presence_of_element_located((By.TAG_NAME, "body"))) except TimeoutException: logging.error("Timed out waiting for body to load") return None resp_text = driver.find_element_by_tag_name("body").text if "Seleccione la oficina donde solicitar la cita" in resp_text: logging.info("Towns hit! :)") # 6. Office selection: time.sleep(0.3) try: WebDriverWait(driver, DELAY).until( EC.presence_of_element_located((By.ID, "btnSiguiente"))) except TimeoutException: logging.error("Timed out waiting for offices to load") return None res = select_office(driver, context) if res is None: time.sleep(5) driver.refresh() continue btn = driver.find_element_by_id("btnSiguiente") btn.send_keys(Keys.ENTER) break elif "En este momento no hay citas disponibles" in resp_text: time.sleep(5) driver.refresh() continue else: logging.info("No towns") return None # 7. phone-mail: try: WebDriverWait(driver, DELAY).until( EC.presence_of_element_located((By.ID, "emailDOS"))) logging.info("Email page hit") except TimeoutException: logging.error("Timed out waiting for phone/email to load") return None element = driver.find_element_by_id("txtTelefonoCitado") element.send_keys(context.phone) # phone num element = driver.find_element_by_id("emailUNO") element.send_keys(context.email) element = driver.find_element_by_id("emailDOS") element.send_keys(context.email) btn = driver.find_element_by_id("btnSiguiente") btn.send_keys(Keys.ENTER) return cita_selection(driver, context)