【问题标题】:Fill website data and click button and parse response填写网站数据并单击按钮并解析响应
【发布时间】:2016-09-26 11:34:26
【问题描述】:

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

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;
                 }
            }
        });

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

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

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

 "frms[0].submit(); };");

还有这个,

"javascript:(function(){document.getElementById('convVeh_Form:j_idt21').click();})()"

但他们不工作。如何点击Id为

的按钮

convVeh_Form:j_idt21

此外,一旦能够单击按钮,响应将来自网站。如何阅读该响应文本并将其放入应用程序的文本视图中?

【问题讨论】:

标签: javascript java android


【解决方案1】:

您遇到了一个单独的问题,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;
    }
  }
});

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

提交表单后,导航将更改。这会触发一个事件,您可以通过子类化 WebView 来挂钩。有关其他问题的示例,请参见 this answer

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

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

【讨论】:

  • 非常感谢。有用。!现在尝试从表中读取数据。 :) :_
【解决方案2】:

我发现正确的 id 是 convVeh_Form:j_idt26 而不是

"javascript:(function(){document.getElementById('convVeh_Form:j_idt21').click();})()"

请检查我的link 以证明这一点

所以,我的主要建议是先在浏览器中测试您的 JS 代码,然后再将其添加到 Android。 Chrome 中的调试模式对此非常有用,我相信您知道如何启用它。

之后,如果您确定JS代码运行良好,请通过逻辑块将代码添加到Android。这可以帮助您调试它。

例如,首先放入以下几行 JS 代码:

document.getElementById('convVeh_Form:tf_reg_no1').value = 'text' document.getElementById('convVeh_Form:tf_reg_no2').value = 'text'

如果您在设备上看到了结果,那么您应该添加点击事件。

document.getElementById('convVeh_Form:j_idt26').click()

它可以分离你的 JS 逻辑,你会确定代码到底出了什么问题。

关于这一行:

此外,一旦能够单击按钮,响应将来自网站。如何阅读该响应文本并将其放入应用程序的文本视图中?

你应该实现自己的WebViewClient()和覆盖onPageFinished并且只在正确的页面上运行JS代码。

@Override
public void onPageFinished(WebView view, String url) {
    super.onPageFinished(view, url);
    if("https://parivahan.gov.in/rcdlstatus/vahan/rcstatus.xhtml".equals(url)) {
        // run JS
    } else if("response_link".equals(url)) {
        // notify user or any other logic
    }
}

祝你好运!

附:上面所有的 JS 代码在我这边的浏览器中运行良好。

【讨论】:

  • 非常感谢。它有效,但接受的答案中给出的解决方案似乎很好,因为按钮 ID 的任何更改都不会影响它。为工作答案+1。
【解决方案3】:

如何点击Id为convVeh_Form:j_idt21的按钮

$('#convVeh_Form:j_idt21').click();

如何阅读该响应文本并将其放入应用程序的文本视图中? 如果是表单的提交,那么这个消息使用ajax调用会更容易:

$.ajax({
   url: "http://your.url",
})
.done(function( data ) {
   $('#textview').text(data);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-04
    相关资源
    最近更新 更多