2017-06-25 5 views
0

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?

Antwort

0

Versuchen Sie einfach, wie ein normaler Benutzer mit dieser Seite

  • erhalten die Seite
  • suchen Sie das Zeichen in Element
  • Klick auf das Zeichen in dem Element zur Interaktion
  • finden Sie die Eingabefelder
  • Geben Sie Ihre Benutzer-ID und Ihr Passwort in das Feld
  • ein und klicken Sie auf die Schaltfläche "Anmelden"

Vielleicht müssen Sie irgendwo einen Wartecode hinzufügen.

+0

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. –

Verwandte Themen