def symbol_to_frames(symbol: str, browser_object: webdriver) -> DataFrame: """ Takes in the symbol and returns floorsheet dataframe """ search_url: str = f"{BASE_URL}{symbol}" browser_object.get(search_url) browser_object.implicitly_wait(IMP_DELAY) # Click on the nav button browser_object.find_element_by_id("navFloorSheet").click() wait() intent_block = browser_object.find_element_by_id( "ctl00_ContentPlaceHolder1_CompanyDetail1_divDataFloorsheet") frame_block = block_to_frame(intent_block) next_button = browser_object.find_element_by_xpath( "//a[@title='Next Page']") pages = [] while get_pages(intent_block)["current_page"] <= get_pages( intent_block)["last_page"] and get_pages( intent_block)["current_page"] not in pages: pages.append(int(get_pages(intent_block)["current_page"])) next_button.click() wait() next_button = browser_object.find_element_by_xpath( "//a[@title='Next Page']") intent_block = browser_object.find_element_by_id( "ctl00_ContentPlaceHolder1_CompanyDetail1_divDataFloorsheet") inter_frame = block_to_frame(intent_block) frame_block = pd.concat([frame_block, inter_frame], axis=0) pages = [] return frame_block
def download_data(browser_object: webdriver, config_object: configparser.ConfigParser) -> BeautifulSoup: browser_object.get(config_object["rekyl_portal"]["url"]) time.sleep(1) username = browser_object.find_element_by_id("username") password = browser_object.find_element_by_css_selector( "input[type=password") username.send_keys(config_object["rekyl_portal"]["username"]) password.send_keys(config_object["rekyl_portal"]["password"]) browser_object.find_element_by_id("button_login_security_low").click() time.sleep(3) show_errands = Select(browser_object.find_element_by_name("maxhits")) show_errands.select_by_index(10) time.sleep(5) browser_object.find_element_by_name("maxhits").send_keys(Keys.RETURN) time.sleep(5) iframe = browser_object.find_element_by_id("iframe_workorder") browser_object.switch_to.frame(iframe) iframe_source = browser_object.page_source soup = BeautifulSoup(iframe_source, "html.parser") browser_object.close() browser_object.quit() logging.info("Raw data downloaded") return soup
def solicitud_step2(driver: webdriver, context: CustomerProfile): # Data form: try: WebDriverWait(driver, DELAY).until( EC.presence_of_element_located((By.ID, "txtIdCitado"))) except TimeoutException: logging.error("Timed out waiting for form to load") return None # Select doc type if context.doc_type == DocType.PASSPORT: driver.find_element_by_id("rdbTipoDocPas").send_keys(Keys.SPACE) elif context.doc_type == DocType.NIE: driver.find_element_by_id("rdbTipoDocNie").send_keys(Keys.SPACE) # Enter doc number and name element = driver.find_element_by_id("txtIdCitado") element.send_keys(context.doc_value, Keys.TAB, context.name, Keys.TAB, context.year_of_birth) success = process_captcha(driver, context) if not success: return return True
def work_details_request(browser: webdriver, title: str) -> BeautifulSoup: wait() try: work = browser.find_element_by_link_text(title) # Waiting 'till link is clickable while True: try: work.click() break except ElementClickInterceptedException: continue requestmeter.count() sleep(0.5) # This delay permits the html display entirely html_ = browser.page_source close_button = browser.find_element_by_id('gs_md_cita-d-x') close_button.click() except Exception as err: print("!!!>>>", title) print(err) logging_collector( "ERROR", "NOT CLICKABLE LNK", [ browser.find_element_by_id('gsc_prf_in').text, # Author title, # Title err ]) # Error return None return BeautifulSoup(html_, 'html.parser')
def execSearch(browser: webdriver, inifile): # 検索ワード抽出 browser.get(_get(inifile, 'search', 'url_trend')) contents = browser.find_elements_by_tag_name('h1') searchWords = [] for content in contents: searchWords.append(content.text) searchWords.pop(0) searchWords.pop(0) # ログインボタンの押下(検索、メールDEポイント共通) browser.get(_get(inifile, 'search', 'url') + '/Web?qt=' + searchWords[0]) searchWords.pop(0) browser.find_element_by_link_text(_get(inifile, 'search', 'login_context')).click() login_user = browser.find_element_by_name(_get(inifile, 'user', 'id_name')) login_user.send_keys(_get(inifile, 'user', 'id')) login_password = browser.find_element_by_name( _get(inifile, 'user', 'pass_name')) login_password.send_keys(_get(inifile, 'user', 'pass')) browser.find_element_by_name("submit").click() sleep(_getRandomNum()) ## 検索ワードを一つずつ処理 for index, searchWord in enumerate(searchWords): search_box = browser.find_element_by_name("qt") search_box.clear() search_box.send_keys(searchWord) browser.find_element_by_id('searchBtn').click() sleep(_getRandomNum())
def login(driver: webdriver, orga): try: usernameMask = None username = None re1 = re.compile('/') sausername = re1.split(orga['usrxpath']) while 1: try: usernameMask = WebDriverWait(driver, 1).until( EC.presence_of_element_located((By.ID, sausername[0]))) break except Exception as e: pass # username = driver.find_element_by_id(orga['usrxpath']) usernameMask.click() time.sleep(0.1) username = driver.find_element_by_id(sausername[1]) username.click() time.sleep(0.1) username.click() time.sleep(0.1) username.send_keys(orga['usr']) password = driver.find_element_by_id(orga['passxpath']) password.send_keys(orga['password']) password.send_keys(Keys.ENTER) except Exception as e: raise e
def download_courses(username: str, password: str, download_path: str, driver: webdriver): wait30: ui.WebDriverWait = ui.WebDriverWait(driver, 30) print("LOGGING IN", flush=True) # Request the login page and wait for it to load driver.get("https://members.usegolang.com/login") wait30.until(lambda driver: driver.find_element_by_xpath( r"""//input[@id="email"]""") is not None) # Fill in the email and password fields, then hit enter to login driver.find_element_by_id("email").send_keys(username) driver.find_element_by_id("password").send_keys(password + "\n") # Wait until login finishes wait30.until(lambda driver: driver.find_element_by_xpath( r"""//small[contains(text(), "Access all of your course contents belows")]""" ) is not None) print("LOGGED IN", flush=True) print("DOWNLOADING MAIN LESSONS", flush=True) # Download all of the main lessons download_videos("https://members.usegolang.com/twg/lessons/lesson-{}", download_path, 1, 83, driver) # Download all of the project lessons download_videos("https://members.usegolang.com/twg/projects/lesson-{}", download_path, 1, 19, driver)
def get_suits_page(web_driver: selenium.webdriver, size, color): web_driver.get("https://outlet-us.suitsupply.com/en_US/home") form = web_driver.find_element_by_id("dwfrm_clearancelanding_code") form.send_keys("2020") button = web_driver.find_element_by_id("sendBtn") button.click() web_driver.get( f"https://outlet-us.suitsupply.com/en_US/c_suits?prefn1=colorID&prefv1={color}&prefn2=size&prefv2={size}")
def get_empty_dates(access_browser: webdriver): host = os.environ['HOST'] access_browser.get( 'https://{}/login/pc-employee/old?lang_code=ja'.format(host)) sleep(5) company_id = access_browser.find_element_by_id("client_id") company_id.send_keys(os.environ['CLIENT_ID']) email = access_browser.find_element_by_id("email") email.send_keys(os.environ['EMAIL']) password = access_browser.find_element_by_id("password") password.send_keys(os.environ['PASSWORD']) login_button = access_browser.find_element_by_css_selector( "body > div > div > div.login-block > form:nth-child(3) > div:nth-child(5) > button" ) login_button.click() sleep(10) access_browser.get("https://{}/employee/attendance/edit".format(host)) sleep(5) empty_dates = [] for i in list(range(2, 35)): raw_date_str = access_browser.find_element_by_css_selector( date_cell_selector.format(i)).text date_str = re.search(r'[0-9]{2}/[0-9]{2}', raw_date_str).group(0) target_date = datetime.datetime.strptime( "{}/{} 23:59".format(datetime.datetime.now().strftime("%Y"), date_str), "%Y/%m/%d %H:%M", ) if target_date > datetime.datetime.now(): break raw_holiday_str = access_browser.find_element_by_css_selector( is_holiday_selector.format(i)).text if len(re.sub(r'\s', '', raw_holiday_str)) > 0: continue start_time_str = access_browser.find_element_by_css_selector( start_time_selector.format(i)).get_attribute("value") end_time_str = access_browser.find_element_by_css_selector( end_time_selector.format(i)).get_attribute("value") rest_time_str = access_browser.find_element_by_css_selector( rest_duration_selector.format(i)).get_attribute("value") has_empty = (len(re.sub(r'\s', '', start_time_str)) * len(re.sub(r'\s', '', end_time_str)) * len(re.sub(r'\s', '', rest_time_str))) == 0 if not has_empty: continue empty_dates.append(target_date) return empty_dates
def go_to_mac_filtration(self, browser: webdriver): """ """ elem = browser.find_element_by_id("Menu1Txt1") elem.click() elem = browser.find_element_by_id("Menu1Txt1") elem.click() elem = browser.find_element_by_id("Menu2Txt3") elem.click()
def login(driver: webdriver): login_url = "https://pvoutput.org/login.jsp" driver.get(login_url) driver.implicitly_wait(100) username = driver.find_element_by_id("login") password = driver.find_element_by_id("password") username.send_keys(USERNAME) password.send_keys(PASSWORD) driver.find_elements_by_class_name("btn-primary")[0].click()
def handle_confirm_box(driver: webdriver, accept=True): driver.find_element_by_id(DISPLAY_CONFIRM_BOX_ID).click() alert = driver.switch_to.alert if accept: alert.accept() else: alert.dismiss() time.sleep(5) msg_element = driver.find_element_by_id(MESSAGE_LOCATOR_ID) return msg_element.text
def display_all_user_works_requests(browser: webdriver) -> None: #print(browser.find_element_by_id('gsc_bpf_more')) is_enable = browser.find_element_by_id('gsc_bpf_more').is_enabled() while is_enable: wait() # Waiting for the adaptive request rate browser.find_element_by_id('gsc_bpf_more').click() requestmeter.count() sleep(1) is_enable = browser.find_element_by_id('gsc_bpf_more').is_enabled()
def handle_prompt_box(driver: webdriver, input=None): driver = webdriver.Chrome() driver.find_element_by_id(DISPLAY_PROMPT_BOX_ID).click() alert = driver.switch_to.alert if input: alert.send_keys(input) alert.accept() time.sleep(5) msg_element = driver.find_element_by_id(MESSAGE_LOCATOR_ID) return msg_element.text else: alert.dismiss() return None
def certificados_ue_step2(driver: webdriver, context: CustomerProfile): # 4. Data form: try: WebDriverWait(driver, DELAY).until(EC.presence_of_element_located((By.ID, "txtPaisNac"))) except TimeoutException: logging.error("Timed out waiting for form to load") return None # Select country select = Select(driver.find_element_by_id("txtPaisNac")) select.select_by_visible_text(context.country) # Select doc type if context.doc_type == DocType.PASSPORT: driver.find_element_by_id("rdbTipoDocPasDdi").send_keys(Keys.SPACE) elif context.doc_type == DocType.NIE: driver.find_element_by_id("rdbTipoDocNie").send_keys(Keys.SPACE) elif context.doc_type == DocType.DNI: driver.find_element_by_id("rdbTipoDocDni").send_keys(Keys.SPACE) # Enter doc number and name element = driver.find_element_by_id("txtIdCitado") element.send_keys(context.doc_value, Keys.TAB, context.name) success = process_captcha(driver, context) if not success: return return True
def driver_do_login(driver: webdriver, credentials: Credentials) -> webdriver: """Consumes a selenium WebDriver pointed at the login page and a Credentials and logs into the british library's MyRequests service. Produces the consequent WebDriver. """ user_field = driver.find_element_by_id(MYREQUESTS_USERNAME_FIELD_ID) pw_field = driver.find_element_by_id(MYREQUESTS_PASSWORD_FIELD_ID) login_button = driver.find_element_by_id(MYREQUESTS_LOGIN_BUTTON) username, password = credentials[0], credentials[1] user_field.send_keys(username) pw_field.send_keys(password) login_button.click() return driver
def to_job(driver: webdriver): driver.find_element_by_id("imgclose").click() # driver.find_element_by_xpath("//*[@id='hotkey_search']/input[7]").click() time.sleep(3) driver.find_element_by_xpath( "//*[@id='divfind_job']/button[2]/span").click() time.sleep(3) driver.find_element_by_xpath("//*[@id='UC_Modal_CJOB-item_7']").click() time.sleep(3) driver.find_element_by_xpath( "//*[@id='UC_FindJob_UC_Modal_CJOB']/div/div/div[3]/button[2]").click( ) time.sleep(3) driver.find_element_by_xpath("//*[@id='UC_FindJob_btn1']").click() time.sleep(3)
def getdep(page: webdriver): """ Selection de la liste des départements :param page: :return: """ return UI.Select(page.find_element_by_id('listeDepartements'))
def browser_login(driver: webdriver): """ 进入登陆页面并完成登陆 """ driver.find_element_by_id(Order.index_login.value).click() driver.switch_to_frame(Order.frame.value) try: driver.find_element_by_css_selector(Order.username.value).send_keys(config.username) driver.find_element_by_css_selector(Order.password.value).send_keys(config.password) time.sleep(2) driver.find_element_by_css_selector(Order.login_button.value).click() except Exception as e: log(e) raise(ZeroDivisionError("登陆标签有变导致 selenium 定位出错,请修正"))
def accept_cookie(driver: webdriver) -> None: """Wikiloc accept cookie policy.""" try: btn = driver.find_element_by_id("acept-cookies") btn.click() except NoSuchElementException: pass
def select_office(driver: webdriver, context: CustomerProfile): if not context.auto_office: speaker.say("MAKE A CHOICE") logging.info("Press Any Key") input() return True else: el = driver.find_element_by_id("idSede") select = Select(el) if context.save_artifacts: offices_path = os.path.join( os.getcwd(), f"offices-{datetime.datetime.now()}.html".replace(":", "-") ) with open(offices_path, "w") as f: f.write(el.get_attribute("innerHTML")) if context.offices: for office in context.offices: try: select.select_by_value(office.value) return True except Exception as e: logging.error(e) if context.operation_code == OperationType.RECOGIDA_DE_TARJETA: return None select.select_by_index(random.randint(0, len(select.options) - 1)) return True
def process_captcha(driver: webdriver, context: CustomerProfile, partially: bool = False): for i in range(1, 4): if context.auto_captcha: # wait for captcha and proceed: WebDriverWait(driver, CAPTCHA_TIMEOUT).until( lambda x: x.find_element_by_css_selector(".antigate_solver.solved") ) else: logging.info("HEY, FIX CAPTCHA and press ENTER") input() logging.info("OK, Waiting") # stop the function upon captcha is solved if partially: return True time.sleep(0.3) btn = driver.find_element_by_id("btnEnviar") btn.send_keys(Keys.ENTER) time.sleep(0.3) try: WebDriverWait(driver, 7).until(EC.presence_of_element_located((By.ID, "btnConsultar"))) break except TimeoutException: logging.error("Captcha loop") if i == 3: # Failed to get captcha logging.error("Tries exceeded") return None return True
def get_status(session: webdriver) -> str: try: status = session.find_element_by_id('texto-estado-fichaje') print(status.text) return status.text except Exception as e: print(f'Unable to get status: {e}') exit(1)
def login(user_id: str, pin: str, site: str, web_driver: webdriver) -> None: if site == OSCAR: field = web_driver.find_element_by_id("user_id") field.send_keys(user_id) field = web_driver.find_element_by_id("pin") field.send_keys(pin) field.send_keys(Keys.RETURN) if site == WORKS: field = web_driver.find_element_by_id("username") field.send_keys(user_id) field = web_driver.find_element_by_id("password") field.send_keys(pin) field.send_keys(Keys.RETURN)
def search_hotel(driver: webdriver, placename): """ This City name and search it :param driver: :param placename: :return: """ #import pdb;pdb.set_trace() driver.find_element_by_id(SEARCH_HOTEL_INPUT_BOX_ID).send_keys(placename) time.sleep(2) sugget_elements = driver.find_elements_by_xpath(SEARCH_PLACE_XPATH) for element in sugget_elements: if element.text == placename: element.click() break else: continue
def get_vehicle_id(driver: webdriver, vehicle: str) -> Tuple[str, str]: """ Gets the ID on the history page associated with the vehicle Args: driver (webdriver): The webdriver used to run the browser session vehicle (str): The registration of the vehicle to look up Returns: Tuple[str, str]: A 2-tuple consisting of the vehicle registration and its associated ID on the page """ print(f'Finding history for {vehicle}') dropdown = Select(driver.find_element_by_id('ctl00_cphcontent_ddlVehicle')) dropdown.select_by_visible_text(vehicle) driver.find_element_by_id('ctl00_cphcontent_btnRunHistory').click() # Get value attribute from selected option selected = driver.find_element_by_xpath( f'//*[@id="ctl00_cphcontent_ddlVehicle"]/option[.="{vehicle}"]') return (vehicle, selected.get_attribute('value'))
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")
def navigate_to_archive(driver: webdriver): find_2fa_ready_element(driver).click() # Select GESAMTER_ZEITRAUM zeitraum_select = driver.find_element_by_id('f1-zeitraumInput_pbInput') select_field = webdriver.support.ui.Select(zeitraum_select) select_field.select_by_value('GESAMTER_ZEITRAUM') # Start search suchen_field = driver.find_element_by_link_text('Suchen') suchen_field.click()
def __init__(self, row: int, col: int, driver: webdriver) -> None: self.bomb: bool = False self.blank: bool = True self.number: bool = False self.attribute: str = 'square blank' self.cell_integer: int = -1 self.posn: Posn = Posn(row, col) self.neighbors: set = set() self.driver: webdriver = driver self.pointer: WebElement = driver.find_element_by_id( f'{row + 1}_{col + 1}')
def phone_mail(driver: webdriver, context: CustomerProfile, retry: bool = False): 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 if not retry: 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) driver.execute_script("enviar();") return cita_selection(driver, context)
def execSearch(browser: webdriver): """ Googleで検索を実行する :param browser: webdriver """ # スクリーンショットのファイル名用に日付を取得 dt = datetime.datetime.today() dtstr = dt.strftime("%Y%m%d%H%M%S") # Googleにアクセス browser.get('https://www.google.co.jp/') sleep(1) # キーワードの入力 browser.find_element_by_id('lst-ib').send_keys('docker selenium') # 検索実行 browser.find_element_by_name('btnK').submit() sleep(1) # スクリーンショット browser.save_screenshot('images/' + dtstr + '.png')