0
HtmlUnitのクリック機能を使用してフォームにログインする際に問題が発生したため、代わりにWebRequestを使用してログインすることにしました。WebRequestを使用してログインした後、HtmlUnitでWebサイトをナビゲート
サイトのログイン方法は、フォームの送信ボタンが別のURLへのajax呼び出しであることです。そのPOSTリクエストからの応答が受信されると、ページは自動的に再起動され、あなたがログインしている。
// 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());
私はまた、メインのサイトに更新クッキーをGET呼び出しWebRequestクラスをやって試してみたが、それも返さUnexpectedPage。これで、正しくログインしたので、HtmlPageを使ってウェブサイトをナビゲートする方法を教えてください。
私はすでにそれを無駄にしようとしています。そのため、代わりにリクエストメソッドを使用しています。 バックグラウンドのJavaScriptを待っていて、再同期化されたajaxコントローラをアクティブにしておきます。 –