Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
    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