Moin,
ich brauche alle Substantive der Stufe A1 (und dann später auch A2, B1, B2, C1 und C2)
Iwie wird ein großes Geheimnis um diese Wörter gemacht oder sind nicht frei zugänglich
Habe mir deshalb einen Crawler geschrieben, aber das Scrollen funktioniert nicht "smart/smooth" und ich komme immer nur bis "Ethik"... danach spinnt die Seite
Dependency:
Beispiel:
Vielleicht habt ihr noch eine Idee, ich bin erst mal überfragt
ich brauche alle Substantive der Stufe A1 (und dann später auch A2, B1, B2, C1 und C2)
Iwie wird ein großes Geheimnis um diese Wörter gemacht oder sind nicht frei zugänglich
Habe mir deshalb einen Crawler geschrieben, aber das Scrollen funktioniert nicht "smart/smooth" und ich komme immer nur bis "Ethik"... danach spinnt die Seite
Dependency:
Code:
// https://mvnrepository.com/artifact/org.seleniumhq.selenium/selenium-java
implementation 'org.seleniumhq.selenium:selenium-java:4.33.0'
Beispiel:
Java:
import java.util.ArrayList;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.interactions.WheelInput;
public class Main {
private static final int shortWait = 250;
private static final int longWait = 5000;
public static void main(String[] args) throws InterruptedException {
String url = "https://www.verbformen.de/suche/deklination/substantive/?l=11&i=false";
ArrayList<String> nouns = getNounsFromUrl(url);
for (String noun : nouns) {
System.out.println(noun);
}
}
private static ArrayList<String> getNounsFromUrl(String url) throws InterruptedException {
ArrayList<String> nouns = new ArrayList<>();
WebDriver wd = new ChromeDriver();
wd.get(url);
Thread.sleep(longWait);
wd.switchTo().frame(wd.findElement(By.xpath("//iframe[@title='SP Consent Message']")));
wd.findElement(By.xpath("//button[@title='Zustimmen']")).click();
Thread.sleep(longWait);
wd.switchTo().defaultContent();
boolean hasNextPage = true;
while (hasNextPage) {
hasNextPage = false;
Thread.sleep(shortWait);
List<WebElement> elements = wd.findElements(By.xpath("//q[starts-with(@class, 'w')]"));
for (int j = 0; j < elements.size(); j++) {
WebElement element = elements.get(j);
String text = element.getText();
if (!text.isBlank() && !nouns.contains(text)) {
nouns.add(text);
if (element.isDisplayed()) {
WheelInput.ScrollOrigin scrollOrigin = WheelInput.ScrollOrigin.fromElement(element);
new Actions(wd).scrollFromOrigin(scrollOrigin, 0, element.getRect().y).perform();
Thread.sleep(shortWait);
}
hasNextPage = true;
}
}
}
wd.quit();
return nouns;
}
}
Vielleicht habt ihr noch eine Idee, ich bin erst mal überfragt