在Android应用程序中使用JavaScript以编程方式登录网站

时间:2014-09-10 05:27:42

标签: javascript android webview

我正在尝试使用JavaScript以编程方式登录网站。这是登录表单的HTML代码。

   <form action="https://www.example.com/login/index.php" method="post" id="login" autocomplete="off" >
      <div class="loginform">
        <div class="form-label"><label for="username">Username</label></div>
        <div class="form-input">
          <input type="text" name="username" id="username" size="15" value="" />
        </div>
 <div class="form-label"><label for="password">Password</label></div>
        <div class="form-input">
          <input type="password" name="password" id="password" size="15" value="" autocomplete="off" />
          <input type="submit" id="loginbtn" value="Login" />
        </div>
      </div>

我尝试在Android应用程序中使用webview登录网站。我使用

  webView.loadUrl("http://www.example.com/info");
    webView.setVisibility(View.INVISIBLE);
    webView.setWebViewClient(new WebViewClient() {

        public void onPageFinished(WebView view, String url) {
            webView.loadUrl("javascript: {" +
                    "document.getElementById('username').value = '"+user+"';" +
                    "document.getElementById('password').value = '"+pass+"';" +
                    "document.getElementById('loginbtn').click();" +
                    "};");  
        }

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

    webView.setVisibility(View.VISIBLE);
    webView.clearCache(true);
    webView.clearHistory();
}

但是webview只在输入字段中显示了uesrname和密码。没有按钮点击发生。我的代码出了什么问题?

3 个答案:

答案 0 :(得分:1)

按如下方式更改您的代码

webView.loadUrl("http://www.example.com/info");
webView.setVisibility(View.INVISIBLE);

//add following two lines
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

webView.setWebViewClient(new WebViewClient() {

    public void onPageFinished(WebView view, String url) {
        webView.loadUrl("javascript: {" +
                "document.getElementById('username').value = '"+user+"';" +
                "document.getElementById('password').value = '"+pass+"';" +
                "document.getElementById('loginbtn').click();" +
                "};");  
    }

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

webView.setVisibility(View.VISIBLE);
webView.clearCache(true);
webView.clearHistory();
}

您可以从this link.

了解更多信息

答案 1 :(得分:0)

这是因为......

document.getElementByName('loginbtn').onclick();

应该是这个......

document.getElementByName('loginbtn').click();

javascript中的onclick对象中没有此类HTMLElementObject方法,您尝试调用的方法是click。这是W3Schools

的文档

答案 2 :(得分:0)

document.getElementByName('loginbtn').click(); 

为我工作。问题是我在WebViewClient类中重写了public boolean shouldOverrideUrlLoading(WebView view, String url)方法。

我删除了那部分后,效果非常好。