Java tutorial
/* Copyright (C) 2013 Tobias Baum <tbaum at tntinteractive.de> This file is a part of Portalsammler. Portalsammler is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Portalsammler is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Portalsammler. If not, see <http://www.gnu.org/licenses/>. */ package de.tntinteractive.portalsammler.sources; import java.util.List; import org.apache.commons.lang3.tuple.Pair; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import de.tntinteractive.portalsammler.engine.DocumentFormat; import de.tntinteractive.portalsammler.engine.DocumentInfo; import de.tntinteractive.portalsammler.engine.FileDownloader; import de.tntinteractive.portalsammler.engine.SecureStore; import de.tntinteractive.portalsammler.engine.SettingKey; import de.tntinteractive.portalsammler.engine.SourceSettings; import de.tntinteractive.portalsammler.engine.UserInteraction; public final class MlpSourceV1 extends DocumentSource { static final SettingKey USER = new SettingKey("Benutzerkennung"); static final SettingKey PASSWORD = new SettingKey("Online-PIN"); public MlpSourceV1(final String id) { super(id); } @Override public Pair<Integer, Integer> poll(final SourceSettings settings, final UserInteraction gui, final SecureStore store) throws Exception { final WebDriver driver = this .createDriver("https://financepilot-pe.mlp.de/p04pepe/entry?rzid=XC&rzbk=0752"); final WebElement userField = driver.findElement(By.id("txtBenutzerkennung")); userField.sendKeys(settings.get(USER, gui)); final WebElement passwordField = driver.findElement(By.className("XPassword")); passwordField.sendKeys(settings.get(PASSWORD, gui)); passwordField.submit(); int newDocs = 0; int knownDocs = 0; try { clickLink(driver, "Postfach"); clickButton(driver, "Dokumente anzeigen"); final WebElement table = driver.findElement(By.id("tblKontoauszuege")); final WebElement tBody = table.findElement(By.xpath("tbody")); final FileDownloader d = new FileDownloader(driver); for (final WebElement tr : tBody.findElements(By.tagName("tr"))) { final List<WebElement> tds = tr.findElements(By.tagName("td")); final DocumentInfo doc = DocumentInfo.create(this.getId(), DocumentFormat.PDF); if (tds.get(2).getText().isEmpty()) { continue; } doc.addKeywords(tds.get(0).getText()); doc.addKeywords(tds.get(1).getText()); doc.setDate(parseDate(tds.get(2).getText())); if (!store.containsDocument(doc)) { final WebElement link = tds.get(0).findElement(By.tagName("a")); final byte[] file = d.downloadFile(link); store.storeDocument(doc, file); newDocs++; } else { knownDocs++; } } } finally { clickButton(driver, "Abmelden"); } return Pair.of(newDocs, knownDocs); } }