填写网站数据并单击按钮并解析响应

Aks*_*hat 10 javascript java android

我想让用户输入车辆编号,然后读取数据并向用户显示车辆详细信息.我不想在webview中这样做.我可以使用以下代码填充数据:

webView = (WebView) findViewById(R.id.webView1);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml");
        webView.setWebViewClient(new WebViewClient() {
            public void onPageFinished(WebView view, String url) {
                String reg1="KA51X";
                String reg2="2442";
                 if(isFirstLoad) {
                     webView.loadUrl("javascript: {" +
                             "document.getElementById('convVeh_Form:tf_reg_no1').value = '" + reg1 + "';" +
                             "document.getElementById('convVeh_Form:tf_reg_no2').value = '" + reg2 + "';" +
                             "var frms = document.getElementsByName('convVeh_Form');" +
                             "frms[0].submit(); };");

                     isFirstLoad = false;
                 }
            }
        });
Run Code Online (Sandbox Code Playgroud)

这是显示此应用程序数据的网站.

https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml

现在我尝试使用此行单击提交按钮

 "frms[0].submit(); };");
Run Code Online (Sandbox Code Playgroud)

还有这个,

"javascript:(function(){document.getElementById('convVeh_Form:j_idt21').click();})()"
Run Code Online (Sandbox Code Playgroud)

但他们没有工作.如何单击Id为的按钮

convVeh_Form:j_idt21

此外,一旦能够单击按钮,响应将来自网站.如何阅读该响应文本并将其放在app的textview中?

Tyl*_*Y86 2

您遇到了一个单独的问题,convVeh_Form:j_idt21只是一个标签(在撰写本文时)。你要convVeh_Form:j_idt27。也许他们改变了?

您可能希望将注入的 javascript 和选择器设置为document.querySelector('[id="convVeh_Form:j_idt27"]').click().

这避免了:作为 css 选择器的特殊字符。

webView = (WebView) findViewById(R.id.webView1);
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml");
webView.setWebViewClient(new WebViewClient() {
  public void onPageFinished(WebView view, String url) {
    String reg1 = "KA51X";
    String reg2 = "2442";
    if (isFirstLoad) {
      webView.loadUrl("javascript: {" +
        "document.getElementById('convVeh_Form:tf_reg_no1').value = '" + reg1 + "';" +
        "document.getElementById('convVeh_Form:tf_reg_no2').value = '" + reg2 + "';" +
        "document.querySelector('[id=\"convVeh_Form:j_idt27\"]').click(); };");

      isFirstLoad = false;
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

如果您知道它始终是第一个按钮,那么您也可以将其用作button[type="submit"]选择器,这样 Id 就不再重要了。(也许它们会再次改变?)
其他字段将是document.querySelectorAll('input[type="text"]')[0][1]

提交表单后,导航将发生变化。这会触发一个事件,您可以通过子类化 WebView 来挂钩。请参阅另一个问题的答案作为示例。

private class HelloWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

使用它作为您的事件,检测端点处的 URL,然后注入一些新的 javascript 以从页面中提取信息。如果您需要更多帮助,请告诉我。