在Webview中自动单击按钮?

时间:2018-11-19 09:19:37

标签: javascript android android-webview

我使用Webview创建了一个应用,需要自动按下按钮

用例:-打开链接web link 并要自动按“此处登录”按钮(右侧的第二个按钮)。

我尝试使用此功能:-

来自网站的“此处登录”按钮的HTML为<input _ngcontent-c13="" style="padding: 2px" type="button" class="pri_btn" value="Login Here"> 它没有 id name ,所以我尝试使用类名,但没有任何反应

String js = "javascript:(function(){"+
    "l=document.getElementByClassName('pri_btn');"+
    "e=document.createEvent('HTMLEvents');"+
    "e.initEvent('click',true,true);"+
    "l.dispatchEvent(e);"+
    "})()";
    webView.evaluateJavascript(js, new ValueCallback<String>() {
        @Override
        public void onReceiveValue(String s) {
            String result = s;

        }
    });

返回空值。

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

您可能想使用称为getElementsByClassName(注意复数)的方法,该方法返回元素的 array 。因此您的代码应如下所示:

String js = "javascript:(function(){"+
    "l=document.getElementsByClassName('pri_btn')[0];"+
    "l.click();"+
    "})()";
webView.evaluateJavascript(js, new ValueCallback<String>() {
    @Override
    public void onReceiveValue(String s) {
        String result = s;
    }
});

此外,当我尝试运行此功能时,重定向期间发生SSL错误。要解决此问题,您应该在onReceivedSslError()中覆盖WebViewClient方法,如下所示:

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
        if (handler != null){
            handler.proceed();
        } else {
            super.onReceivedSslError(view, null, error);
        }
    }
});

webView.getSettings().setDomStorageEnabled(true);

编辑: 检查元素值中是否存在“登录”:

javascript:(function(){
tab = document.getElementsByClassName('pri_btn');
for(var i=0; i< tab.length; i++){
    if(tab[i].value.toLowerCase().indexOf("login") !== -1) return tab[i].click();
}
})()

答案 1 :(得分:0)

没有名为 getElementByClassName 的方法。它应该是getElementsByClassName。同样, getElementsByClassName 返回的数组不是DOM元素。因此,您不能使用变量 l 作为元素。

尝试一下:

var loginBtns=document.getElementByClassName('pri_btn');
//assuming that there is only one element with class name pri_btn
loginBtns[0].click();