2017-06-25 1 views
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を使ってウェブサイトをナビゲートする方法を教えてください。

答えて

0

ただ、入力フィールドを見つけ要素

  • に記号を要素に
  • クリックして記号を見つけ取得このページ

    • と通常のユーザのように対話するページ
    • を試してみてください
    • あなたのユーザーIDとパスワードを入力してください
    • ログインボタンをクリックしてクリックしてください

    多分あなたはどこかにいくつかの待機コードを追加する必要があります。

  • +0

    私はすでにそれを無駄にしようとしています。そのため、代わりにリクエストメソッドを使用しています。 バックグラウンドのJavaScriptを待っていて、再同期化されたajaxコントローラをアクティブにしておきます。 –

    関連する問題