def click(self, selector): xptr = MyXPathTranslator() xpsel, index = xptr.jq_to_xpath(selector) elements = self.webdriver.find_elements_by_xpath(xpsel) if abs(index) == index: try: elements = [elements[index]] except IndexError: # element not found raise InvalidSelectorException if len(elements) == 0: raise InvalidSelectorException for element in elements: if not element.is_displayed(): raise InvalidSelectorException try: element.click() except WebDriverException: self.webdriver.execute_script( "document.querySelector('%s').click();" % selector) self.wait() super(DynamicWP, self).set_page_source(self.webdriver.page_source)
def __get_lxml_elems_by_sel_from_str__(self, selector, target): ''' Get elements by selector from target type of string. LXML implementation ''' elements = [] try: tree = lhtml.fromstring(target) except lxml.etree.XMLSyntaxError: super(AParseBySelector, self).register_warning(Action.AW_UNABLE_TO_LOCATE_TARGET) return elements if selector: if True: # XPath relative algo: hack xpt = MyXPathTranslator() xpath_objects = xpt.jq_to_xpath(selector) for xpsel, epos in xpath_objects: elements = tree.xpath(xpsel) if epos > -1: elements = elements[epos] break # if selector[0:1] == '>': # selector = selector[1:] # sel = CSSSelector(selector).path # xpath_self = re.sub(r'^descendant-or-self::', '', sel) # if 'nth-child' in selector: # elements = tree.xpath(sel) # else: # elements = tree.xpath(xpath_self) # if item_count > 0: # elements = [elements[item_count - 1]] # else: # elements = CSSSelector(selector)(tree) else: elements = [tree] return elements