Example usage for org.jsoup.nodes Element getElementsByAttribute

List of usage examples for org.jsoup.nodes Element getElementsByAttribute

Introduction

In this page you can find the example usage for org.jsoup.nodes Element getElementsByAttribute.

Prototype

public Elements getElementsByAttribute(String key) 

Source Link

Document

Find elements that have a named attribute set.

Usage

From source file:com.adavr.player.media.XVClient.java

private Map<String, String> getFlashVars(String url) throws ClientException {
    client.get(url);/*from w ww . j  a v  a  2 s . c  om*/
    Document document = client.getJsoupDocument();
    Element player = document.getElementById("player");
    Elements candidates = player.getElementsByAttribute("flashvars");
    if (candidates.isEmpty()) {
        return null;
    }
    return parseFlashVars(candidates.get(0).attr("flashvars"));
}

From source file:ExtractorContentTest.java

private void _collectAllComparisonOf(String url, List<Element> hrefs) throws IOException {

    Document doc = Jsoup.connect("" + URL_BASE_NAME + url).get();
    Elements aHrefs = doc.select("a[href]");

    Element urlNext = null;// w  w  w.  j  a va 2  s .c  o m
    for (Element aHref : aHrefs) {
        Element h = aHref.getElementsByAttribute("href").first(); // val() ;
        String hText = h.attr("title");
        String hURL = h.attr("href");
        if (hText.contains("Comparison") && hURL.startsWith("/wiki/")) {
            hrefs.add(aHref);
        }
        String aText = aHref.text();
        if (aText.contains("Next page") && hURL.startsWith("/w/index.php?"))
            urlNext = aHref;

    }

    if (urlNext != null) {
        _collectAllComparisonOf(urlNext.attr("href"), hrefs);
    }

}

From source file:ExtractorContentTest.java

private List<Header> collectHeaders(Element table) {
    List<Header> headers = new ArrayList<Header>();
    List<Header> headersWithNestedHeaders = new ArrayList<Header>();
    List<List<Header>> nestedHeaders = new ArrayList<List<Header>>();

    int levelHeader = 0; // FIXME nested header > 1

    for (Element row : table.select("tr")) {

        if (isEmpty(row)) // sometimes the first row, especially in sortable table, is empty (the second row is relevant for headers) 
            continue;

        if (levelHeader == 0) {
            for (Element header : row.select("th")) {
                String hName = header.text();
                Header headerV = new Header(hName);
                Elements colspan = header.getElementsByAttribute("colspan");
                if (!colspan.isEmpty()) {
                    headersWithNestedHeaders.add(headerV);
                    int v = Integer.parseInt(colspan.first().attr("colspan"));
                    headerV.setNumbersOfNestedHeaders(v);
                }/*from   w w w.jav a  2s.c  o m*/

                headers.add(headerV);

            }
            levelHeader++;
        }

        else if (levelHeader == 1) {
            // nested header
            List<Header> nHeaders = new ArrayList<Header>();
            for (Element header : row.select("th")) {
                String hName = header.text();
                Header headerV = new Header(hName);
                nHeaders.add(headerV);
            }
            nestedHeaders.add(nHeaders);
            levelHeader++;
        }

    }

    // FIXME table.select("thead"); 

    // FIXME assign a "number" of appearance for headers 
    // especially important for nested headers (colspan="3")
    List<Header> rHeaders = new ArrayList<Header>();
    List<Header> nHeaders = new ArrayList<Header>();
    if (nestedHeaders.size() > 0)
        nHeaders = nestedHeaders.get(0); // FIXME 0 at the moment but normally it can be refined

    int lastIndex = 0;
    for (Header header : headers) {
        // nested
        if (headersWithNestedHeaders.contains(header)) { // header has nested headers

            int nNestedHeaders = header.getNumbersOfNestedHeaders(); // number of hested headers 

            // now associating an header to nested headers
            // nHeaders[lastIndex...lastIndex+nNestedHeaders]

            int v = 0;
            int u = 0;
            for (Header nH : nHeaders) {
                if (u++ < lastIndex)
                    continue;
                rHeaders.add(nH);
                if (v < nNestedHeaders) {
                    header.addNestedHeader(nH);
                    nH.addParentHeader(header);
                    v++;
                }

            }
            lastIndex += nNestedHeaders;

        } else {
            rHeaders.add(header);
        }

    }
    //System.err.println("rHeaders=" + rHeaders);
    return rHeaders;
}

From source file:com.screenslicer.core.util.BrowserUtil.java

private static WebElement toElement(Browser browser, HtmlNode htmlNode, Element body, boolean recurse)
        throws ActionFailed {
    if (body == null) {
        body = BrowserUtil.openElement(browser, true, null, null, null, null);
    }/*from   w  w w .  j av  a  2s.  c o m*/
    if (!CommonUtil.isEmpty(htmlNode.id)) {
        Elements elements = body.getElementsByAttributeValue("id", htmlNode.id);
        if (elements.size() == 1) {
            WebElement element = toElement(browser, elements.get(0), htmlNode, recurse);
            if (element != null) {
                return element;
            }
        }
    }
    List<Elements> selected = new ArrayList<Elements>();
    if (!CommonUtil.isEmpty(htmlNode.tagName)) {
        selected.add(body.getElementsByTag(htmlNode.tagName));
    } else if (!CommonUtil.isEmpty(htmlNode.href)) {
        selected.add(body.getElementsByTag("a"));
    }
    if (!CommonUtil.isEmpty(htmlNode.id)) {
        selected.add(body.getElementsByAttributeValue("id", htmlNode.id));
    }
    if (!CommonUtil.isEmpty(htmlNode.name)) {
        selected.add(body.getElementsByAttributeValue("name", htmlNode.name));
    }
    if (!CommonUtil.isEmpty(htmlNode.type)) {
        selected.add(body.getElementsByAttributeValue("type", htmlNode.type));
    }
    if (!CommonUtil.isEmpty(htmlNode.value)) {
        selected.add(body.getElementsByAttributeValue("value", htmlNode.value));
    }
    if (!CommonUtil.isEmpty(htmlNode.title)) {
        selected.add(body.getElementsByAttributeValue("title", htmlNode.title));
    }
    if (!CommonUtil.isEmpty(htmlNode.role)) {
        selected.add(body.getElementsByAttributeValue("role", htmlNode.role));
    }
    if (!CommonUtil.isEmpty(htmlNode.alt)) {
        selected.add(body.getElementsByAttributeValue("alt", htmlNode.alt));
    }
    if (htmlNode.classes != null && htmlNode.classes.length > 0) {
        Map<Element, Integer> found = new HashMap<Element, Integer>();
        for (int i = 0; i < htmlNode.classes.length; i++) {
            Elements elements = body.getElementsByClass(htmlNode.classes[i]);
            for (Element element : elements) {
                if (!found.containsKey(element)) {
                    found.put(element, 0);
                }
                found.put(element, found.get(element) + 1);
            }
        }
        Elements elements = new Elements();
        for (int i = htmlNode.classes.length; i > 0; i--) {
            for (Map.Entry<Element, Integer> entry : found.entrySet()) {
                if (entry.getValue() == i) {
                    elements.add(entry.getKey());
                }
            }
            if (!elements.isEmpty()) {
                break;
            }
        }
        selected.add(elements);
    }
    if (!CommonUtil.isEmpty(htmlNode.href)) {
        Elements hrefs = body.getElementsByAttribute("href");
        Elements toAdd = new Elements();
        String currentUrl = browser.getCurrentUrl();
        String hrefGiven = htmlNode.href;
        for (Element href : hrefs) {
            String hrefFound = href.attr("href");
            if (hrefGiven.equalsIgnoreCase(hrefFound)) {
                toAdd.add(href);
                toAdd.add(href);
                toAdd.add(href);
            } else if (htmlNode.fuzzy && hrefFound != null && hrefFound.endsWith(hrefGiven)) {
                toAdd.add(href);
                toAdd.add(href);
            } else if (htmlNode.fuzzy && hrefFound != null && hrefFound.contains(hrefGiven)) {
                toAdd.add(href);
            } else {
                String uriGiven = UrlUtil.toCanonicalUri(currentUrl, hrefGiven);
                String uriFound = UrlUtil.toCanonicalUri(currentUrl, hrefFound);
                if (uriGiven.equalsIgnoreCase(uriFound)) {
                    toAdd.add(href);
                }
            }
        }
        selected.add(toAdd);
    }
    if (!CommonUtil.isEmpty(htmlNode.innerText)) {
        selected.add(body.getElementsMatchingText(Pattern.quote(htmlNode.innerText)));
        selected.add(body.getElementsMatchingText("^\\s*" + Pattern.quote(htmlNode.innerText) + "\\s*$"));
    }
    if (htmlNode.multiple != null) {
        selected.add(body.getElementsByAttribute("multiple"));
    }
    Map<Element, Integer> votes = new HashMap<Element, Integer>();
    for (Elements elements : selected) {
        for (Element element : elements) {
            if (!votes.containsKey(element)) {
                votes.put(element, 0);
            }
            votes.put(element, votes.get(element) + 2);
            if (!NodeUtil.isHidden(element)) {
                votes.put(element, votes.get(element) + 1);
            }
        }
    }
    int maxVote = 0;
    Element maxElement = null;
    for (Map.Entry<Element, Integer> entry : votes.entrySet()) {
        if (entry.getValue() > maxVote) {
            maxVote = entry.getValue();
            maxElement = entry.getKey();
        }
    }
    return toElement(browser, maxElement, htmlNode, recurse);
}

From source file:com.screenslicer.core.util.Util.java

public static WebElement toElement(RemoteWebDriver driver, HtmlNode htmlNode, Element body)
        throws ActionFailed {
    if (body == null) {
        body = Util.openElement(driver, null, null, null);
    }//ww w  .  jav a 2s. c o  m
    if (!CommonUtil.isEmpty(htmlNode.id)) {
        WebElement element = toElement(driver, body.getElementById(htmlNode.id));
        if (element != null) {
            return element;
        }
    }
    List<Elements> selected = new ArrayList<Elements>();
    if (!CommonUtil.isEmpty(htmlNode.tagName)) {
        selected.add(body.getElementsByTag(htmlNode.tagName));
    } else if (!CommonUtil.isEmpty(htmlNode.href)) {
        selected.add(body.getElementsByTag("a"));
    }
    if (!CommonUtil.isEmpty(htmlNode.name)) {
        selected.add(body.getElementsByAttributeValue("name", htmlNode.name));
    }
    if (!CommonUtil.isEmpty(htmlNode.type)) {
        selected.add(body.getElementsByAttributeValue("type", htmlNode.type));
    }
    if (!CommonUtil.isEmpty(htmlNode.value)) {
        selected.add(body.getElementsByAttributeValue("value", htmlNode.value));
    }
    if (!CommonUtil.isEmpty(htmlNode.title)) {
        selected.add(body.getElementsByAttributeValue("title", htmlNode.title));
    }
    if (htmlNode.classes != null && htmlNode.classes.length > 0) {
        Map<Element, Integer> found = new HashMap<Element, Integer>();
        for (int i = 0; i < htmlNode.classes.length; i++) {
            Elements elements = body.getElementsByClass(htmlNode.classes[i]);
            for (Element element : elements) {
                if (!found.containsKey(element)) {
                    found.put(element, 0);
                }
                found.put(element, found.get(element) + 1);
            }
        }
        Elements elements = new Elements();
        for (int i = htmlNode.classes.length; i > 0; i--) {
            for (Map.Entry<Element, Integer> entry : found.entrySet()) {
                if (entry.getValue() == i) {
                    elements.add(entry.getKey());
                }
            }
            if (!elements.isEmpty()) {
                break;
            }
        }
        selected.add(elements);
    }
    if (!CommonUtil.isEmpty(htmlNode.href)) {
        Elements hrefs = body.getElementsByAttribute("href");
        Elements toAdd = new Elements();
        String currentUrl = driver.getCurrentUrl();
        String hrefGiven = htmlNode.href;
        for (Element href : hrefs) {
            String hrefFound = href.attr("href");
            if (hrefGiven.equalsIgnoreCase(hrefFound)) {
                toAdd.add(href);
            } else {
                String uriGiven = Util.toCanonicalUri(currentUrl, hrefGiven);
                String uriFound = Util.toCanonicalUri(currentUrl, hrefFound);
                if (uriGiven.equalsIgnoreCase(uriFound)) {
                    toAdd.add(href);
                }
            }
        }
        selected.add(toAdd);
    }
    if (!CommonUtil.isEmpty(htmlNode.innerText)) {
        selected.add(body.getElementsMatchingText(Pattern.quote(htmlNode.innerText)));
    }
    if (htmlNode.multiple != null) {
        selected.add(body.getElementsByAttribute("multiple"));
    }
    Map<Element, Integer> votes = new HashMap<Element, Integer>();
    for (Elements elements : selected) {
        for (Element element : elements) {
            if (!Util.isHidden(element)) {
                if (!votes.containsKey(element)) {
                    votes.put(element, 0);
                }
                votes.put(element, votes.get(element) + 1);
            }
        }
    }
    int maxVote = 0;
    Element maxElement = null;
    for (Map.Entry<Element, Integer> entry : votes.entrySet()) {
        if (entry.getValue() > maxVote) {
            maxVote = entry.getValue();
            maxElement = entry.getKey();
        }
    }
    return toElement(driver, maxElement);
}

From source file:org.asqatasun.rules.elementchecker.attribute.AttributeOnChildElementPresenceChecker.java

/**
 * This methods checks whether elements have a child element of with a given 
 * attribute.// w  ww. j  a v  a 2  s .  com
 * 
 * @param elements
 * @param testSolutionHandler 
 */
private void checkChildElementWithAttributePresence(Elements elements,
        TestSolutionHandler testSolutionHandler) {
    if (elements.isEmpty()) {
        testSolutionHandler.addTestSolution(TestSolution.NOT_APPLICABLE);
        return;
    }

    TestSolution testSolution = TestSolution.PASSED;

    for (Element el : elements) {

        if (!el.getElementsByAttribute(attributeName).isEmpty()) {

            testSolution = setTestSolution(testSolution, getSuccessSolution());
            addSourceCodeRemark(getSuccessSolution(), el, getSuccessMsgCode());

        } else {

            testSolution = setTestSolution(testSolution, getFailureSolution());
            addSourceCodeRemark(getFailureSolution(), el, getFailureMsgCode());

        }
    }

    testSolutionHandler.addTestSolution(testSolution);
}