List of usage examples for org.jsoup.nodes Element getElementsByAttribute
public Elements getElementsByAttribute(String key)
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); }