Ich hatte Probleme mit HtmlUnit die Klick-Funktionalität, um mit dem Formular anmelden, so entschied ich mich stattdessen mit einem WebRequest anmelden.Navigieren Website mit HtmlUnit nach dem Einloggen mit WebRequest
Die Anmeldung der Site besteht darin, dass die Übergabeschaltfläche für das Formular ein AJAX-Aufruf an eine separate URL ist. Sobald die Antwort von diesem POST-Anforderung empfangen wird, lädt die Seite automatisch und Sie sind angemeldet.
// Client configuration
WebClient webClient = new WebClient(BrowserVersion.CHROME);
webClient.getOptions().setJavaScriptEnabled(true);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.getOptions().setCssEnabled(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
// Get cookies (Not sure if necessary to log in)
HtmlPage webPage = (HtmlPage)webClient.getPage("https://www.marinetraffic.com/");
URL cookieURL = new URL("https://www.marinetraffic.com/");
String cookies = webClient.getCookies(cookieURL).toString();
// Configure request headings
URL url = new URL("https://www.marinetraffic.com/en/users/ajax_login");
WebRequest requestSettings = new WebRequest(url, HttpMethod.POST);
requestSettings.setAdditionalHeader(":authority", "www.marinetraffic.com");
requestSettings.setAdditionalHeader(":method", "POST");
requestSettings.setAdditionalHeader(":path", "/en/users/ajax_login");
requestSettings.setAdditionalHeader(":scheme", "https");
requestSettings.setAdditionalHeader("accept", "*/*");
requestSettings.setAdditionalHeader("accept-encoding", "gzip,deflate,sdch");
requestSettings.setAdditionalHeader("accept-language", "en-US,en;q=0.8");
requestSettings.setAdditionalHeader("content-type", "application/x-www-form-urlencoded; charset=UTF-8");
requestSettings.setAdditionalHeader("cookie", cookies);
requestSettings.setAdditionalHeader("origin", "https://www.marinetraffic.com");
requestSettings.setAdditionalHeader("referer", "https://www.marinetraffic.com/en/ais/home/centerx:-33.1/centery:21.4/zoom:4");
requestSettings.setAdditionalHeader("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36");
requestSettings.setAdditionalHeader("x-requested-with", "XMLHttpRequest");
// Request body with form information
requestSettings.setRequestBody("_method=POST&email=dummy%40gmail.com&password=fakepassword&is_ajax=true");
// redirectPage is of type UnexpectedPage
Page redirectPage = webClient.getPage(requestSettings);
webClient.waitForBackgroundJavaScript(10 * 1000);
// Console confirms login was a success
System.out.println(redirectPage.getWebResponse().getContentAsString());
System.out.println(webClient.getCookies(cookieURL).toString());
// When I try to navigate to the main page I am not logged in
HtmlPage webPage2 = (HtmlPage)webClient.getPage("https://www.marinetraffic.com/");
System.out.println(webPage2.asXml());
Ich habe auch versucht, eine WebRequest mit den aktualisierten Cookies auf die Hauptseite aufrufen GET tun, sondern dass auch zurück eine UnerwarteteSeite. Nun, da ich mich richtig angemeldet habe, wie würde ich eine Html-Seite aufrufen, um auf der Website zu navigieren?
Ich habe das schon vergebens versucht, weshalb ich stattdessen auf die Request-Methode zurückgegriffen habe. Ich habe auf Hintergrund Javascript gewartet und die Resynchronisierung AJAX-Controller aktiviert. –