Ejemplo n.º 1
0
def assert_start_page(web_driver: webdriver):
    """Test the MyakuWeb start page with the web driver."""
    viewport_width = web_driver.get_window_size()['width']
    _go_to_start_page(web_driver)

    assert_css_loaded(web_driver)
    assert_element_by_tag(web_driver, 'title', 'Myaku', False)

    header_element = web_driver.find_element_by_tag_name('header')
    assert_search_header(header_element, viewport_width)

    main_element = web_driver.find_element_by_tag_name('main')
    assert_start_tiles(main_element)
Ejemplo n.º 2
0
def body_text(driver: webdriver):
    try:
        WebDriverWait(driver, DELAY).until(EC.presence_of_element_located((By.TAG_NAME, "body")))
        return driver.find_element_by_tag_name("body").text
    except TimeoutException:
        logging.info("Timed out waiting for body to load")
        return ""
Ejemplo n.º 3
0
def get_links(driver: webdriver) -> Issues_Links:
    tag = driver.find_element_by_tag_name('table')

    issue_links: list = []
    links = tag.find_elements_by_tag_name('a')
    for link in links:
        issue_links.append(list([link.get_attribute('href'), link.text]))
    return issue_links
Ejemplo n.º 4
0
def try_mute(driver: webdriver):
    try:
        driver.switch_to_frame(driver.find_element_by_tag_name("iframe"))
        elem = driver.find_element_by_id("applixir_video_ima-mute-div")
        elem.click()
        print("muted")
        driver.switch_to_default_content()
    except:
        driver.switch_to_default_content()
        print("fail to mute")
Ejemplo n.º 5
0
def courseDetails(driver: webdriver, url: str):
    driver.get(url)
    #time.sleep(7)
    l = WebDriverWait(driver, timeout=10).until(
        expected_conditions.presence_of_element_located(
            (By.CSS_SELECTOR, "div[jsname='rymPhb']")))
    # while not WebDriverWait(driver, timeout=10).until(expected_conditions.element_to_be_clickable(l.find_element_by_tag_name("div"))):
    # time.sleep(2)
    check_height = driver.execute_script("return document.body.scrollHeight;")
    while True:
        driver.execute_script(
            "window.scrollTo(0, document.body.scrollHeight);")
        time.sleep(4)
        height = driver.execute_script("return document.body.scrollHeight;")
        if height == check_height:
            break
        check_height = height
    pg = BeautifulSoup(driver.page_source, "lxml")
    temp = pg.find(name="div", attrs={"jsname": "rymPhb"})
    assign, material, text = [], [], []
    for i in range(len(temp.contents)):
        if len(temp.contents[i]["class"]) > 4:
            j = temp.contents[i].contents[0].contents[0].contents
            text = j[2].contents[0].contents[1].contents[0].string.split(
                ": ")[1]
            date = j[2].contents[1].contents[1].string
            if j[0]["aria-label"][0] == "A":
                assign.append([i, text, date])
            else:
                material.append([i, text, date])
    time.sleep(3)
    total = driver.find_elements(By.CSS_SELECTOR, "div[jsname='rymPhb'] > div")
    for i in assign:
        #WebDriverWait(driver, timeout = 5).until(expected_conditions.element_to_be_clickable((By.CSS_SELECTOR, "div[jsname='rymPhb']")))
        driver.execute_script("arguments[0].click();", total[i[0]])
        #total[i[0]].click()
        time.sleep(3)
        assignment = BeautifulSoup(driver.page_source, "lxml")
        WebDriverWait(driver, timeout=6).until(
            expected_conditions.visibility_of(
                driver.find_elements_by_class_name("W4hhKd")[-1]))
        details = assignment.find_all(name="div",
                                      attrs={"class": "W4hhKd"
                                             })[-1].contents  #make DOM visible
        i.append(details[1].string)  #due date
        if i[-1] is None:
            i[-1] = "No due date"
        #i.append(details[0].contents[0].contents[0].string) #max marks
        if len(details[0].contents) == 0:
            i.append("No marks mentioned")
            i.append("No marks received")
        else:
            temp = details[0].contents[0].contents[0].contents
            if len(temp) > 1:
                i.append(temp[1].string.split()[-1])
                i.append(temp[1].string.split()[0])
            else:
                i.append(temp[0])
                i.append("No marks received")
        details = assignment.find_all(name="aside", attrs={
            "class": "asCVDb"
        })[-1].contents[0].contents[0].contents[1].contents[0]
        if details.contents[0].string[0] == 'A':
            i.append(details.contents[0].string + " (Not submitted)")
        else:
            i.append(details.contents[0].string)
        i[0] = driver.current_url
        driver.find_element_by_tag_name("nav").find_element_by_tag_name(
            "div").find_element_by_tag_name("div").find_element_by_tag_name(
                "div").find_element_by_tag_name("h1").find_element_by_tag_name(
                    "a").click()
        time.sleep(2)

    for i in material:
        total[i[0]].click()
        time.sleep(2)
        i[0] = driver.current_url
        driver.find_element_by_tag_name("nav").find_element_by_tag_name(
            "div").find_element_by_tag_name("div").find_element_by_tag_name(
                "div").find_element_by_tag_name("h1").find_element_by_tag_name(
                    "a").click()
        time.sleep(2)
    return assign, material
Ejemplo n.º 6
0
def cita_selection(driver: webdriver, context: CustomerProfile):
    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 "DISPONE DE 5 MINUTOS" in resp_text:
        logging.info("Cita attempt -> selection hit! :)")
        if context.save_artifacts:
            driver.save_screenshot(
                f"citas-{datetime.datetime.now()}.png".replace(":", "-"))

        try:
            driver.find_elements_by_css_selector(
                "input[type='radio'][name='rdbCita']")[0].send_keys(Keys.SPACE)
        except Exception as e:
            logging.error(e)
            pass

        btn = driver.find_element_by_id("btnSiguiente")
        btn.send_keys(Keys.ENTER)
        driver.switch_to.alert.accept()
    else:
        logging.info("Cita attempt -> missed selection :(")
        return None

    # 9. Confirmation
    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 "Debe confirmar los datos de la cita asignada" in resp_text:
        logging.info("Cita attempt -> confirmation hit! :)")

        if context.telegram_token:
            dispatcher = context.updater.dispatcher

            def shutdown():
                context.updater.stop()
                context.updater.is_idle = False

            def code_received(update, ctx):
                logging.info(f"Received code: {ctx.args[0]}")

                element = driver.find_element_by_id("txtCodigoVerificacion")
                element.send_keys(ctx.args[0])

                driver.find_element_by_id("chkTotal").send_keys(Keys.SPACE)
                driver.find_element_by_id("enviarCorreo").send_keys(Keys.SPACE)

                btn = driver.find_element_by_id("btnConfirmar")
                btn.send_keys(Keys.ENTER)

                try:
                    WebDriverWait(driver, DELAY).until(
                        EC.presence_of_element_located((By.TAG_NAME, "body")))
                except TimeoutException:
                    logging.info("Timed out waiting for body to load")
                    return None

                resp_text = driver.find_element_by_tag_name("body").text
                ctime = datetime.datetime.now()

                if "CITA CONFIRMADA Y GRABADA" in resp_text:
                    context.bot_result = True
                    code = driver.find_element_by_id("justificanteFinal").text
                    logging.info(f"Justificante cita: {code}")
                    caption = f"Cita confirmed! {code}"
                    if context.save_artifacts:
                        image_name = f"CONFIRMED-CITA-{ctime}.png".replace(
                            ":", "-")
                        driver.save_screenshot(image_name)
                        ctx.bot.send_photo(
                            chat_id=update.effective_chat.id,
                            photo=open(os.path.join(os.getcwd(), image_name),
                                       "rb"),
                            caption=caption,
                        )
                        btn = driver.find_element_by_id("btnImprimir")
                        btn.send_keys(Keys.ENTER)
                    else:
                        ctx.bot.send_message(chat_id=update.effective_chat.id,
                                             text=caption)

                    threading.Thread(target=shutdown).start()
                    return True
                elif "Lo sentimos, el código introducido no es correcto" in resp_text:
                    ctx.bot.send_message(chat_id=update.effective_chat.id,
                                         text="Incorrect, please try again")
                else:
                    error_name = f"error-{ctime}.png".replace(":", "-")
                    driver.save_screenshot(error_name)
                    ctx.bot.send_photo(
                        chat_id=update.effective_chat.id,
                        photo=open(os.path.join(os.getcwd(), error_name),
                                   "rb"),
                    )
                    ctx.bot.send_message(chat_id=update.effective_chat.id,
                                         text="Something went wrong")

            dispatcher.add_handler(
                CommandHandler("code", code_received, pass_args=True))
            context.updater.start_polling(poll_interval=1.0)

            for i in range(5):
                speaker.say("ALARM")
            # Waiting for response 5 minutes
            time.sleep(360)
            threading.Thread(target=shutdown).start()
            if context.save_artifacts:
                driver.save_screenshot(
                    f"FINAL-SCREEN-{datetime.datetime.now()}.png".replace(
                        ":", "-"))

            if context.bot_result:
                driver.quit()
                os._exit(0)
            return None
        else:
            for i in range(5):
                speaker.say("ALARM")
            logging.info("Press Any button to CLOSE browser")
            input()

    else:
        logging.info("Cita attempt -> missed confirmation :(")
        if context.save_artifacts:
            driver.save_screenshot(
                f"failed-confirmation-{datetime.datetime.now()}.png".replace(
                    ":", "-"))
        return None
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
def CLR_Html(browser: webdriver, Name: str) -> str:
    """
    a = CLR_Html(self.b, ['page_name', 'profile_message_send', 'profile_action_btn', 'profile_msg_split'])
    print(a)
    :param Name:
    :param browser:
    :return:
    """

    res = []
    all_res = []
    # a = Soport_webdriver.CLR_Html(b,['mail_box_send'])
    for name in Name:

        try:
            all_res.append(browser.find_element_by_id(name).text)
            res.append('find_element_by_id')
        except:
            pass

        try:
            all_res.append(browser.find_element_by_name(name).text)
            res.append('find_element_by_name')
        except:
            pass

        try:
            all_res.append(browser.find_element_by_xpath(name).text)
            res.append('find_element_by_xpath')
        except:
            pass

        try:
            all_res.append(browser.find_element_by_link_text(name).text)
            res.append('find_element_by_link_text')
        except:
            pass

        try:
            all_res.append(
                browser.find_element_by_partial_link_text(name).text)
            res.append('find_element_by_partial_link_text')
        except:
            pass

        try:
            all_res.append(browser.find_element_by_tag_name(name).text)
            res.append('find_element_by_tag_name')
        except:
            pass

        try:
            all_res.append(browser.find_element_by_class_name(name).text)
            res.append('find_element_by_class_name')
        except:
            pass

        try:
            all_res.append(browser.find_element_by_css_selector(name).text)
            res.append('find_element_by_css_selector')
        except:
            pass

    io = ''
    for x in range(len(res)):
        io += '{} |-| {} |-| {}\n'.format(str(Name[x]), str(res[x]),
                                          str(all_res[x]))
    return io