Wieso findet mein Programm die Cookies nicht(Java, Selenium)?
Hallo,ich arbeite grad an einem Programm und zwar an einem Automatischen Login weil ich das bald im Büro brauch deswegen benutzte ich aktuell als Testseite phase6.deIch greife auf die Website zu das ist kein Problem auch innerhalb dort kann ich alles steuern login ausführen auf buttons klicken etc. Doch das kann ich erst machen wenn die Cookies akzeptiert sind und mein Programm findet egal mit welchem Code die Cookies der Website nicht, wenn ich sie manuell anklicke geht der rest wieder ohne probleme, aber die Cookies machen mir zuschaffenKann mir da jemand helfen, was für Cookies das sind und wie ich darauf zugreife habe es schon mit dem xpath, cssSelector, name, id alles versucht import org.openqa.selenium.By;
Das ist mein aktueller Code(keine Cookie abfrage aktuell drin da ich testen wollte ob wenn ich manuell draufklicke dann buttons gefunden werden
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.edge.EdgeDriver;
import org.openqa.selenium.*;
import java.util.Set;
import java.util.concurrent.TimeUnit;
public class EdgeLogin {
public static void main(String[] args) {
// Setze den Pfad zum Microsoft Edge WebDriver
System.setProperty("webdriver.edge.driver", "C:\\Users\\A020451\\EigeneDateien\\EdgeLogin\\msedgedriver.exe");
// Erzeuge eine neue Instanz des EdgeDriver
WebDriver driver = new EdgeDriver();
// Navigiere zur Phase6-Website
driver.get("https://www.phase6.de");
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Maximiere das Browserfenster
driver.manage().window().maximize();
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
driver.findElement(By.cssSelector(".p6-icon-login")).click();
}
}
Das ist der HTML-Code von dem Button auf der main html seite
<button id="acceptAllCookies" class="btn btn-primary" onclick="setGdprCookieAll();closeThisModal()" xpath="1">
::before
<span class="icon_check hide"></span>
::after
</button>
1 Antwort
Cookies sind keine HTML-Elemente, die man im DOM finden, noch auf der grafischen Oberfläche anklicken könnte.
Über die WebDriver.Options kannst du auf Cookies zugreifen.
Cookie cookieByName = driver.manage().getCookieNamed("cookie name");
Set<Cookie> allCookies = driver.manage().getCookies();
Weiteres zur Bearbeitung von Cookies via Selenium (Hinzufügen, Entfernen) wird in der Dokumentation aufgeführt.
Das ist der Name des Cookies, welches ausgelesen werden soll. Wenn du nach einem Cookie suchst, dass es nicht gibt, bekommst du null zurück.
okay, hab die unten beschriebenen infos ausgelesen und ausgegeben, aber ich will ja das das alle akzeptieren/ablehnen weg ist damit ich auf die Hauptseite
TPU=DJJL7UAVANU85PJC6N4ETY3RA3GUERGU; expires=Di., 21 Nov. 2023 03:50:15 MEZ; path=/; domain=phase-6.;secure;; sameSite=Lax
JSESSIONID=EC6ABBC03B8FAA8449A0D2FD0DFCD9DB; path=/; domain=.phase-6.;secure;; sameSite=Lax
zugreifen kann, verstehst du ungefähr was ich meine?
Also welche cookies muss ich mit
driver.manage().addCookies();
hinzufügen damit das passiert
- Geh in einem Browser auf die Webseite.
- Öffne die Webentwicklungstools. In Brave/Chrome/Opera gibt es dort den Tab Application, in Firefox heißt er Web-Speicher. Unter diesem findest du in der linken Seitenleiste einen aufklappbaren Knoten Cookies. Selektiere dessen Subknoten, der den Domainnamen der Webseite trägt.
- Auf der rechten Seite werden anschließend alle aktuellen Cookies der Seite aufgelistet.
- Wenn du nun den Cookie-Popup bestätigst, die Seite neu lädst und erneut in die Cookie-Liste schaust, werden neue Cookies hinzugekommen sein. Einer von denen speichert sicherlich die Cookie-Bestätigung. Schau nach dem Namen, meist haben solche Cookies Wörter wie accepted oder consent im Namen. Andernfalls kannst du je Cookie in der Liste prüfen, was passiert, wenn er gelöscht wird (Löschen > Seite neu laden > Wird der Cookie-Popup wieder angezeigt?).
Wenn die Information in keinem Cookie gespeichert wird, liegt sie im Web Storage. Im Application-/Web-Speicher-Tab gibt es dafür die Knoten Local Storage/Session Storage.
Mit Selenium kannst du auch den Web Storage manipulieren.
Beispiel:
JavascriptExecutor executor = (JavascriptExecutor) driver;
executor.executeScript("localStorage.setItem(arguments[0], arguments[1])", "key to add/edit", "some value"));
Das "cookie name" kann ich das beliebig nennen oder muss das irgendwie aus der website rausgenommen werden?