List of usage examples for org.jsoup.nodes Element getElementsContainingOwnText
public Elements getElementsContainingOwnText(String searchText)
From source file:com.seleniumtests.uipage.htmlelements.CachedHtmlElement.java
@Override public List<WebElement> findElements(By by) { List<WebElement> foundElements = new ArrayList<>(); if (by instanceof By.ById) { Field field;//from w ww . ja v a 2 s . co m try { field = By.ById.class.getDeclaredField("id"); field.setAccessible(true); foundElements.add(new CachedHtmlElement(cachedElement.getElementById((String) field.get(by)))); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new CustomSeleniumTestsException( "problem searching By field during reflection: core should be checked", e); } } else if (by instanceof By.ByTagName) { Field field; try { field = By.ByTagName.class.getDeclaredField("tagName"); field.setAccessible(true); foundElements.addAll(cachedElement.getElementsByTag((String) field.get(by)).stream() .map(CachedHtmlElement::new).collect(Collectors.toList())); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new CustomSeleniumTestsException( "problem searching By field during reflection: core should be checked", e); } } else if (by instanceof By.ByClassName) { Field field; try { field = By.ByClassName.class.getDeclaredField("className"); field.setAccessible(true); foundElements.addAll(cachedElement.getElementsByClass((String) field.get(by)).stream() .map(CachedHtmlElement::new).collect(Collectors.toList())); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new CustomSeleniumTestsException( "problem searching By field during reflection: core should be checked", e); } } else if (by instanceof By.ByName) { Field field; try { field = By.ByName.class.getDeclaredField("name"); field.setAccessible(true); foundElements.addAll(cachedElement.getElementsByAttributeValue("name", (String) field.get(by)) .stream().map(CachedHtmlElement::new).collect(Collectors.toList())); } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new CustomSeleniumTestsException( "problem searching By field during reflection: core should be checked", e); } } else if (by instanceof By.ByLinkText || by instanceof By.ByPartialLinkText) { Field field; try { field = By.ByLinkText.class.getDeclaredField("linkText"); field.setAccessible(true); for (Element el : cachedElement.getElementsByTag("a")) { try { el.getElementsContainingOwnText((String) field.get(by)).get(0); foundElements.add(new CachedHtmlElement(el)); } catch (IndexOutOfBoundsException e) { // nothing to do } } } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { throw new CustomSeleniumTestsException( "problem searching By field during reflection: core should be checked", e); } } else { throw new NotImplementedException( String.format("%s is not implemented in cached element", by.getClass())); } return foundElements; }
From source file:com.rickendirk.rsgwijzigingen.ZoekService.java
private void addDagEnDatum(Wijzigingen wijzigingen, Document doc) { //Dag waarvoor wijzigingen zijn ophalen Element dag = doc.select("body > div > div:nth-child(2) > p > b > span").first(); //Compatibiliteit met andere opmaak, om NPE te voorkomen if (dag == null) { dag = doc.select("body > center:nth-child(2) > div").first(); }//from ww w. j av a 2 s .c o m String dagStr = dag.text().toLowerCase(); // Woorden staan verkeerd om: omwisselen int indexVanSpatie = dagStr.indexOf(" "); String datum = dagStr.substring(0, indexVanSpatie); String rest = dagStr.substring(indexVanSpatie + 1); String dagGoed = rest + " " + datum; wijzigingen.setDagEnDatum(dagGoed); //Stand ophalen: staat in 1e tabel van HTML Element tableDate = doc.select("table").get(0); String dateFullText = tableDate.getElementsContainingOwnText("Stand:").text(); //Deel achter "Stand:" pakken String FullTextSplit[] = dateFullText.split("Stand:"); wijzigingen.setStandZin("Stand van" + FullTextSplit[1]); }
From source file:com.rickendirk.rsgwijzigingen.ZoekService.java
private ArrayList<String> checkerKlas() { ArrayList<String> tempList = new ArrayList<>(); //String halen uit SP String klasTextS = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) .getString("pref_klas", ""); //Checken of klas niet leeg is if (klasTextS.equals("")) { tempList.add("geenKlas"); return tempList; }//from w ww. j ava2 s . c o m //Eerste teken klas mag geen letter zijn if (Character.isLetter(klasTextS.charAt(0))) { tempList.add("EersteTekenLetter"); return tempList; } //String opsplitsen in 2 delen, om naar hoofdletters te converteren char charcijfer = klasTextS.charAt(0); String klascijfer = String.valueOf(charcijfer); char charafdeling = klasTextS.charAt(1); String klasafdelingBig = String.valueOf(charafdeling).toUpperCase(); //Onderstaand voor hoofdlettercorrectie String klasCorrect; //KlasCorrect is klas na hoofdlettercorrectie switch (klasTextS.length()) { case 2: klasCorrect = klascijfer + klasafdelingBig; break; case 3: char klasabc = klasTextS.charAt(2); String klasabcSmall = String.valueOf(klasabc).toLowerCase(); klasCorrect = klascijfer + klasafdelingBig + klasabcSmall; break; case 4: char klasafdeling2 = klasTextS.charAt(2); String klasafdeling2Big = String.valueOf(klasafdeling2).toUpperCase(); klasabc = klasTextS.charAt(3); klasabcSmall = String.valueOf(klasabc).toLowerCase(); klasCorrect = klascijfer + klasafdelingBig + klasafdeling2Big + klasabcSmall; break; default: tempList.add("klasMeerDan4Tekens"); return tempList; } //Try en catch in het geval dat de internetverbinding mist try { String url = "http://www.rsgtrompmeesters.nl/roosters/roosterwijzigingen/Lijsterbesstraat/subst_001.htm"; Document doc = Jsoup.connect(url).get(); Elements tables = doc.select("table"); if (tables.size() < 2) { //Geen geschikte tabel aanwezig tempList.add("geenTabel"); return tempList; } Element table = tables.get(1); Elements rows = table.select("tr"); //Loop genereren, voor elke row kijken of het de goede tekst bevat //Beginnen bij 4e, bovenstaande is niet belangrijk for (int i = 2; i < rows.size(); i++) { Element row = rows.get(i); Elements cols = row.select("td"); if (cols.get(0).text().contains(klasCorrect)) { String vakOud = Jsoup.parse(cols.get(2).toString()).text(); String docentOud = Jsoup.parse(cols.get(3).toString()).text(); String vakNieuw = Jsoup.parse(cols.get(4).toString()).text(); String docentNieuw = Jsoup.parse(cols.get(5).toString()).text(); //If in geval van uitval, else ingeval van wijziging if (Jsoup.parse(cols.get(6).toString()).text().contains("--")) { //2 opties: wordt verplaatst of valt uit if (Jsoup.parse(cols.get(8).toString()).text().contains("Uitval")) { String wijziging = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + Jsoup.parse(cols.get(2).toString()).text() + " valt uit"; tempList.add(wijziging); } else { //Uur wordt verplaatst String wijziging = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + "wordt verplaatst naar " + Jsoup.parse(cols.get(8).toString()).text(); tempList.add(wijziging); } } else if (vakOud.equals(vakNieuw) && docentOud.equals(docentNieuw)) { String wijziging = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + vakOud + " wordt verplaatst naar " + Jsoup.parse(cols.get(6).toString()).text(); tempList.add(wijziging); } else { String wijzigingKaal; if (vakOud.equals(vakNieuw) && !docentOud.equals(docentNieuw)) { // Opvang door andere docent: dit staat alleen bij klas omdat // dit amper gebeurt bij clusters wijzigingKaal = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + docentOud + " wordt opgevangen door " + docentNieuw; } else { //Geen opvang door andere docent, lokaalwijziging oid wijzigingKaal = // Voegt alle kolommen samen tot 1 string // .text() zorgt voor leesbare text // Spaties voor leesbaarheid Jsoup.parse(cols.get(1).toString()).text() + "e uur " + Jsoup.parse(cols.get(2).toString()).text() + " " + Jsoup.parse(cols.get(3).toString()).text() + " wordt " + Jsoup.parse(cols.get(4).toString()).text() + " " + Jsoup.parse(cols.get(5).toString()).text() + " in " + Jsoup.parse(cols.get(6).toString()).text(); } //ipv en naar bevatten een "/" ivm uren (ma 12-04 / 4) String ipv = ""; if (Jsoup.parse(cols.get(7).toString()).text().contains("/")) { ipv = "ipv " + Jsoup.parse(cols.get(7).toString()).text(); } String naar = ""; if (Jsoup.parse(cols.get(8).toString()).text().contains("/")) { naar = "naar " + Jsoup.parse(cols.get(8).toString()).text() + " "; } String vervangingsTekst = ""; // staat in lege cell, encoding enz, zie volgende link: // http://stackoverflow.com/questions/26837034/how-to-tell-if-a-html-table-has-an-empty-cell-nbsp-using-jsoup //Soms veregeten ze de opmerkingen, dan krijg je size = 9 en error if (cols.size() > 9) { if (!Jsoup.parse(cols.get(9).toString()).text().equals("\u00a0")) { vervangingsTekst = "(" + Jsoup.parse(cols.get(9).toString()).text() + ")"; } } String wijziging = wijzigingKaal + " " + ipv + " " + naar + " " + vervangingsTekst; tempList.add(wijziging); } } //Geen wijzigingen pas bij laatste rij if (i == rows.size() - 1) { //Checken of tempList leeg is, zo ja 1 ding toevoegen if (tempList.isEmpty()) { tempList.add("Er zijn geen wijzigingen"); } //Dag waarvoor wijzigingen zijn ophalen Element dag = doc.select("body > div > div:nth-child(2) > p > b > span").first(); //Compatibiliteit met andere opmaak, om NPE te voorkomen if (dag == null) { dag = doc.select("body > center:nth-child(2) > div").first(); } String dagStr = dag.text().toLowerCase(); // Woorden staan verkeerd om: omwisselen int indexVanSpatie = dagStr.indexOf(" "); String datum = dagStr.substring(0, indexVanSpatie); String rest = dagStr.substring(indexVanSpatie + 1); String dagGoed = rest + " " + datum; tempList.add(dagGoed); //Stand ophalen: staat in 1e tabel van HTML Element tableDate = doc.select("table").get(0); String dateFullText = tableDate.getElementsContainingOwnText("Stand:").text(); //Deel achter "Stand:" pakken String FullTextSplit[] = dateFullText.split("Stand:"); tempList.add(FullTextSplit[1]); return tempList; } } } catch (java.io.IOException e) { //Error toevoegen aan tempList, dat wordt weergegeven in messagebox tempList.clear(); tempList.add("verbindFout"); return tempList; } //Zover hoort de method NOOIT te komen tempList.add("andereFout"); return tempList; }
From source file:com.rickendirk.rsgwijzigingen.ZoekService.java
private ArrayList<String> checkerClusters() { ArrayList<String> tempList = new ArrayList<>(); //String van klas halen uit SP String klasTextS = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()) .getString("pref_klas", ""); String url = "http://www.rsgtrompmeesters.nl/roosters/roosterwijzigingen/Lijsterbesstraat/subst_001.htm"; SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); //Clusters ophalen uit SP ArrayList<String> clusters = new ArrayList<>(); for (int a = 1; a < 15; a++) { //String initializen, anders kan hij hem niet toevoegen String clusterLowCase = ""; String cluster = sp.getString("pref_cluster" + a, ""); //If om nullpointer te voorkomen if (!cluster.equals("")) { clusterLowCase = cluster.substring(0, 1).toLowerCase() + cluster.substring(1); }//from w w w .j a va2s. c o m clusters.add(clusterLowCase); } //Lege clusters weghalen uit arraylist TODO: Kijken of singleton werkt/wat het is clusters.removeAll(Collections.singleton("")); //Er moeten wel clusters zijn ingevoerd: Zo nee, komt AlertDialog via onPostExecute if (clusters.isEmpty()) { tempList.add("geenClusters"); return tempList; } //Checken of klas niet leeg is if (klasTextS.equals("")) { tempList.add("geenKlas"); return tempList; } //Eerste teken klas mag geen letter zijn if (Character.isLetter(klasTextS.charAt(0))) { tempList.add("EersteTekenLetter"); return tempList; } //String opsplitsen in 2 delen, om naar hoofdletters te converteren char charcijfer = klasTextS.charAt(0); String klascijfer = String.valueOf(charcijfer); char charafdeling = klasTextS.charAt(1); String klasafdelingBig = String.valueOf(charafdeling).toUpperCase(); //Onderstaand voor hoofdlettercorrectie String klasCorrect; //KlasCorrect is klas na hoofdlettercorrectie switch (klasTextS.length()) { case 2: klasCorrect = klascijfer + klasafdelingBig; break; case 3: char klasabc = klasTextS.charAt(2); String klasabcSmall = String.valueOf(klasabc).toLowerCase(); klasCorrect = klascijfer + klasafdelingBig + klasabcSmall; break; case 4: char klasafdeling2 = klasTextS.charAt(2); String klasafdeling2Big = String.valueOf(klasafdeling2).toUpperCase(); klasabc = klasTextS.charAt(3); klasabcSmall = String.valueOf(klasabc).toLowerCase(); klasCorrect = klascijfer + klasafdelingBig + klasafdeling2Big + klasabcSmall; break; default: tempList.add("klasMeerDan4Tekens"); return tempList; } //Try en catch in het geval dat de internetverbinding mist try { Document doc = Jsoup.connect(url).get(); Elements tables = doc.select("table"); if (tables.size() < 1) { //Geen geschikte tabel aanwezig tempList.add("geenTabel"); return tempList; } Element table = tables.get(1); Elements rows = table.select("tr"); //Eerste loop is om 2e loop te herhalen voor iedere cluster, tweede loop //doorzoekt dan op zowel klas als cluster for (int b = 0; b < clusters.size(); b++) { for (int i = 2; i < rows.size(); i++) { Element row = rows.get(i); Elements cols = row.select("td"); if (cols.get(0).text().contains(klasCorrect) && cols.get(2).text().contains(clusters.get(b))) { String vakOud = Jsoup.parse(cols.get(2).toString()).text(); String docentOud = Jsoup.parse(cols.get(3).toString()).text(); String vakNieuw = Jsoup.parse(cols.get(4).toString()).text(); String docentNieuw = Jsoup.parse(cols.get(5).toString()).text(); //If in geval van uitval, else ingeval van wijziging if (Jsoup.parse(cols.get(6).toString()).text().contains("--")) { //2 opties: wordt verplaatst of valt uit if (Jsoup.parse(cols.get(8).toString()).text().contains("Uitval")) { String wijziging = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + Jsoup.parse(cols.get(2).toString()).text() + " valt uit"; tempList.add(wijziging); } else { //Uur wordt verplaatst String wijziging = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + "wordt verplaatst naar " + Jsoup.parse(cols.get(8).toString()).text(); tempList.add(wijziging); } } else if (vakOud.equals(vakNieuw) && docentOud.equals(docentNieuw)) { String wijziging = Jsoup.parse(cols.get(1).toString()).text() + "e uur " + vakOud + " wordt verplaatst naar " + Jsoup.parse(cols.get(6).toString()).text(); tempList.add(wijziging); } else { String wijzigingKaal = // Voegt alle kolommen samen tot 1 string // .text() zorgt voor leesbare text // Spaties voor leesbaarheid Jsoup.parse(cols.get(1).toString()).text() + "e uur " + Jsoup.parse(cols.get(2).toString()).text() + " " + Jsoup.parse(cols.get(3).toString()).text() + " wordt " + Jsoup.parse(cols.get(4).toString()).text() + " " + Jsoup.parse(cols.get(5).toString()).text() + " in " + Jsoup.parse(cols.get(6).toString()).text(); //ipv en naar bevatten een "/" ivm uren (ma 12-04 / 4) String ipv = ""; if (Jsoup.parse(cols.get(7).toString()).text().contains("/")) { ipv = "ipv " + Jsoup.parse(cols.get(7).toString()).text(); } String naar = ""; if (Jsoup.parse(cols.get(8).toString()).text().contains("/")) { naar = "naar " + Jsoup.parse(cols.get(8).toString()).text() + " "; } String vervangingsTekst = ""; // staat in lege cell, encoding enz, zie volgende link: // http://stackoverflow.com/questions/26837034/how-to-tell-if-a-html-table-has-an-empty-cell-nbsp-using-jsoup if (cols.size() > 9) { if (!Jsoup.parse(cols.get(9).toString()).text().equals("\u00a0")) { vervangingsTekst = "(" + Jsoup.parse(cols.get(9).toString()).text() + ")"; } } String wijziging = wijzigingKaal + " " + ipv + " " + naar + " " + vervangingsTekst; tempList.add(wijziging); } } //Geen wijzigingen pas bij laatste rij en de laatste cluster if (i == rows.size() - 1 && b == clusters.size() - 1) { //Checken of tempList leeg is, zo ja 1 ding toevoegen if (tempList.isEmpty()) { tempList.add("Er zijn geen wijzigingen"); } //Dag waarvoor wijzigingen zijn ophalen Element dag = doc.select("body > div > div:nth-child(2) > p > b > span").first(); //Compatibiliteit met andere opmaak, om NPE te voorkomen if (dag == null) { dag = doc.select("body > center:nth-child(2) > div").first(); } String dagStr = dag.text().toLowerCase(); // Woorden staan verkeerd om: omwisselen int indexVanSpatie = dagStr.indexOf(" "); String datum = dagStr.substring(0, indexVanSpatie); String rest = dagStr.substring(indexVanSpatie + 1); String dagGoed = rest + " " + datum; tempList.add(dagGoed); //Stand ophalen: staat in 1e tabel van HTML Element tableDate = doc.select("table").get(0); String dateFullText = tableDate.getElementsContainingOwnText("Stand:").text(); //Deel achter "Stand:" pakken String FullTextSplit[] = dateFullText.split("Stand:"); tempList.add(FullTextSplit[1]); return tempList; } } } } catch (java.io.IOException e) { //Error toevoegen aan tempList, dat wordt weergegeven in messagebox tempList.clear(); tempList.add("verbindFout"); return tempList; } //Zover hoort de method NOOIT te komen tempList.add("andereFout"); return tempList; }