def __init__(self, driver: webdriver): """ :param driver: WebDriver from selenium """ self.currentGroup = "" self.currentGroupName = "" self.currentFileName = "" self.driver = driver driver.delete_all_cookies() url = "https://qun.qq.com/member.html" self.driver.get(url) time.sleep(1) i = True while i: try: # self.driver.switch_to.frame("login_frame") # login = self.driver.find_element_by_class_name("face") # get face to login # login.click() time.sleep(10) li_list = self.find_ul_element() li_list[0].click() i = False except (NoSuchFrameException, NoSuchElementException): self.driver.navigate().refresh() self.switch = self.driver.find_element_by_id("changeGroup")
def setup_proxy_for_driver(driver: webdriver, test_url=None, times=0): if times > 9: logger.warning('setup_proxy_for_driver no available proxy') raise TooManyTimesException('setup_proxy_for_driver') try: try: # clean cookie and close session driver.delete_all_cookies() driver.quit() except: pass proxy_url = get_proxy().get('proxy') logger.info('proxy get {}'.format(proxy_url)) capabilities = get_capabilities(proxy_url) logger.info('start new session') driver.start_session(capabilities=capabilities) logger.info('start testing proxy') ok = test_proxy(driver, test_url, proxy_url) if not ok: logger.warning('proxy checking failed for {} times'.format(times + 1)) return setup_proxy_for_driver(driver, test_url, times=times + 1) logger.info('proxy works') return driver except SessionNotCreatedException: logger.error('Failed to start a new session') return setup_proxy_for_driver(connect_to_driver(), test_url, times=times + 1) except InvalidSessionIdException as e2: logger.error('Session id invalid {}'.format(e2)) return setup_proxy_for_driver(driver, test_url, times=times + 1) except WebDriverException as e3: logger.error('No active session with ID') return setup_proxy_for_driver(driver, test_url, times=times + 1) except NoProxyAvailableException: logger.error('No proxy') mongo._report_error({ 'error_source': 'proxy', 'message': 'no_proxy_available', 'url': None, 'payload': {} }) return setup_proxy_for_driver(driver, test_url, times=times + 1) except Exception as e: logger.error(f'setup_proxy_for_driver {e}') raise e
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)
def cica_initialized(driver: webdriver): """initialized cica page""" driver.delete_all_cookies() driver.get("https://cica.vugk.sk/Default.aspx") driver.find_element_by_id("button_VL").click() logger.info("cica page was initialized")