def analyze_element(self, el: WebElement): plan_id = el.find_element_by_id('SelectedPlanId').get_attribute( 'value') price_element = el.find_element_by_id('averageRate-{}'.format(plan_id)) price = price_element.text plan_element = el.find_element_by_xpath( './div[@class="row"]/div[1]/div[2]/strong') product_name = plan_element.text collapse_btn = self.wait_until( '//button[@aria-controls="collapse-{}"]'.format(plan_id), By.XPATH) self.client.execute_script("arguments[0].click();", collapse_btn) term_element = self.wait_until( '//div[@id="collapse-{}"]/div[1]/div[1]/div[3]'.format(plan_id), By.XPATH) term = term_element.text match = re.search(r'(\d+)\s+Months', term) if match: term = match.groups()[0] else: raise Exception("Term could not match. (%s)" % term) efl_download_link_element = self.wait_until( '//div[@id="collapse-{}"]/div[2]/div[1]/a'.format(plan_id), By.XPATH) efl_download_link_element.click() return { 'term': term, 'price': price, 'product_name': product_name, }
def analyze_element(self, el: WebElement): # term term_element = el.find_element_by_css_selector( 'div.pricing-table-value-small.ng-binding') term_full_text = term_element.text unit_text = term_element.find_element_by_xpath('.//span').text term_text_index = len(term_full_text) - len(unit_text) term = term_full_text[:term_text_index].rstrip() # price price_element = el.find_element_by_css_selector( 'div.pricing-table-value.ng-binding') price_full_text = price_element.text currency_text = price_element.find_element_by_xpath('.//sup').text price_text_index = len(price_full_text) - len(currency_text) price = price_full_text[:price_text_index].rstrip() # product product_name = el.find_element_by_css_selector( 'h1.pricing-table-title').text # download # close the survey dialog box if it is open decline_button = self.client.find_element_by_id("mcx_decline") if decline_button and decline_button.is_displayed(): decline_button.click() # open modal for getting download link signup_form = el.find_element_by_id('signupForm') modal_link_element = signup_form.find_element_by_xpath('.//a') modal_link_element.click() dialog_element = self.client.find_element_by_css_selector( 'div.modal.active') link_element = dialog_element.find_elements_by_xpath( './/div//div[@class="modal-body"]/' 'p[@class="modal-link-container"]/a')[-1] link_element.click() # close the modal button = dialog_element.find_element_by_css_selector( 'a.plan-modal-link-close') button.click() return { 'term': term, 'price': price, 'product_name': product_name, }
def get_element_static(target_element: WebElement, verifier: SelecElement) -> WebElement: try: element = None if verifier.element_type == NavEleType.IsId: element = target_element.find_element_by_id(verifier.target) elif verifier.element_type == NavEleType.IsClass: element = target_element.find_element_by_class_name(verifier.target) elif verifier.element_type == NavEleType.IsCssSelector: element = target_element.find_element_by_css_selector(verifier.target) elif verifier.element_type == NavEleType.IsName: element = target_element.find_element_by_name(verifier.target) else: raise ValueError("Selector not Supported") return element except Exception as inst: print(type(inst)) print(inst.args) return None
def get_element_static(target_element: WebElement, verifier: SelecElement) -> WebElement: try: element = None if verifier.element_type == NavEleType.IsId: element = target_element.find_element_by_id(verifier.target) elif verifier.element_type == NavEleType.IsClass: element = target_element.find_element_by_class_name( verifier.target) elif verifier.element_type == NavEleType.IsCssSelector: element = target_element.find_element_by_css_selector( verifier.target) elif verifier.element_type == NavEleType.IsName: element = target_element.find_element_by_name(verifier.target) else: raise ValueError("Selector not Supported") return element except Exception as inst: print(type(inst)) print(inst.args) return None
def getElementById(self, id: str, maxTry: int = 30, waitPerTry: int = 2, element: WebElement = None, raiseException=True) -> WebElement: exit = False while not exit: try: if element: result = element.find_element_by_id(id) else: result = self.driver.find_element_by_id(id) return result except Exception as e: maxTry -= 1 if maxTry == 0: if raiseException: raise e else: break exit = self.sleep(waitPerTry)
def analyze_element(self, el: WebElement): detail_btn = self.wait_until( '//button[@aria-controls="expander-2"]', By.XPATH ) detail_btn.click() detail_element = el.find_element_by_id('expander-2') term_element = detail_element.find_element_by_xpath( '//strong[contains(text(), "Term")]/following-sibling::div') term = term_element.text match = re.search(r'(\d+)\s+Month', term) if match: term = match.groups()[0] elif term == 'Month to month': term = '1' else: raise Exception("Term could not match. (%s)" % term) price_element = el.find_element_by_css_selector( 'div > div:nth-child(1) > h2 > span') price = price_element.text.split("¢")[0] plan_element = detail_element.find_element_by_xpath( '//strong[contains(text(), "Plan name")]/following-sibling::div') product_name = plan_element.text pdf_url = detail_element.find_element_by_xpath( '//strong[contains(text(), "Plan documents")]' + '/following-sibling::ul/' + 'li/a[contains(text(), "Electricity Facts Label")]' ).get_attribute('href') self.client.get(pdf_url) return { 'term': term, 'price': price, 'product_name': product_name, }
def get_calendar_for_month(self, cal: WebElement, month_id: str) -> WebElement: month_select_list = cal.find_element_by_id(self.MONTH_SELECT_LIST_ID) month_option = month_select_list.find_element_by_xpath( '//select[@id="%s"]/option[@value="%s"]' % (self.MONTH_SELECT_LIST_ID, month_id)) return self.get_calendar(refresh_button=month_option)
def process_hire(hire: WebElement, table: WebElement) -> None: detail_id = hire.get_attribute("id").replace("hire", "detail") detail = table.find_element_by_id(detail_id) print(hire.get_attribute("outerHTML")) print(detail.get_attribute("outerHTML")) print("---------------------------------------")