2

On Button click:

    public void login(View v) {

        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(rlayout.getWindowToken(), 0);


        loginWebView.loadUrl("https://example.de");
        loginWebView.setVisibility(View.INVISIBLE);
        loginWebView.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String url) {
                loginWebView.loadUrl("javascript: {" +
                        "document.getElementById('login_act').value = '" + "USNAME" + "';" +
                        "document.getElementById('login_pwd').value = '" + "PWD" + "';" +
                        "document.getElementById('submit').click();" +
                        "};");
            }

            public void onPageFinished2(WebView view, String url) {
                loginWebView.loadUrl(url);
            }
        });

        loginWebView.clearCache(true);
        loginWebView.clearHistory();


    WebView view = (WebView) this.findViewById(R.id.mainwebView);

    String url = "https://example.de";
    view.loadUrl(url);


}

On Button click: 1- 1. WebView Login 2- 2. WebView show Page 3- Ready

At my first try all worked. No Error, no problems. The only thing was, that the WebView loaded with the page, where i was not logged in.

How can i log in and what went wrong ?

Amruth
  • 5,792
  • 2
  • 28
  • 41
Excel1
  • 557
  • 1
  • 7
  • 20
  • Liese-Meitner Gymnasium soso – Jonas Wilms Sep 28 '16 at 13:48
  • Nunja was sagt denn der Log? Bzw was genau hat nicht funktioniert? – Jonas Wilms Sep 28 '16 at 13:53
  • An sich hat alles funktioniert bis auf das einloggen. Ich habe mittlerweile die Website nochmal ausgelesen und herausgefunden, dass anstatt `document.getElementById('login_act').value` das stehen muss `document.getElementById('idusr').value` und bei `document.getElementById('login_pwd').value` das: `document.getElementById('idpwd').value` jedoch weiß ich a) die ID vom Button nicht sicher und leider gibt er keine Fehlermeldung aus – Excel1 Sep 28 '16 at 13:58
  • Öffne einfach nen browser aufm rechner, öffne die console (rechtsklick: element untersuchen) und teste den code da. Dann erhälst du auch dierekt die JS fehlermeldungen – Jonas Wilms Sep 28 '16 at 14:02
  • @Jonasw das ist die Fehlermeldung in Android Studio: W/cr_BindingManager: Cannot call determinedVisibility() - never saw a connection for the pid: 758 – Excel1 Sep 28 '16 at 14:14
  • http://stackoverflow.com/questions/33083066/android-webview-cannot-call-determinedvisibility-never-saw-a-connection-for das vieleicht hilfreich – Jonas Wilms Sep 28 '16 at 14:18
  • @Jonasw leide erfolgte der login dennoch nicht.Ich kann mich manuell über den WebView einloggen. Auch ruft er die Seite (/v3/) auf. Jedoch bin ich nicht eingeloggt – Excel1 Sep 28 '16 at 14:25

2 Answers2

4

Try to replace:

public void onPageFinished(WebView view, String url) {
       loginWebView.loadUrl("javascript: {" +
             "document.getElementById('login_act').value = '" + "USNAME" + "';" +
             "document.getElementById('login_pwd').value = '" + "PWD" + "';" +
             "document.getElementById('submit').click();" +
             "};");
}

With:

public void onPageFinished(WebView view, String url) {
  loginWebView.loadUrl("javascript:{" +
    "ins=document.getElementsByTagName('input');" +
    "ins[0].value='usrn';" +
    "ins[1].value='pwd';" +
    "ins[2].value=true;" +
    "document.getElementsByTagName('form')[0].submit();" +
    "};" ); 
}

Replace for usrn your username and replace for pwd your password. Use ins[2].value=true to hit "remember me". (If there no "remember me" checkbox delete it)

The last entry hit the submit Button.

Main Sourcecode by Jonas w - https://stackoverflow.com/users/5260024/jonas-w

user987339
  • 10,519
  • 8
  • 40
  • 45
Excel1
  • 557
  • 1
  • 7
  • 20
1

(Just an advanced comment):

"javascript:{
 ins=document.getElementsByTagName('input');
ins[0].value='username';
ins[1].value='password';
ins[2].value=true;
document.getElementsByTagName('form')[0].submit();
}"

Das schreibt username ins erste, passwort ins zweite und setzt das Dritte auf true und schickt das erste formular ab...

Jonas Wilms
  • 132,000
  • 20
  • 149
  • 151