填写网站数据,点击button,parsing响应

我想让用户input车号,然后读取数据并向用户显示车辆详细信息。 我不想在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; } } }); 

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

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

现在我正在尝试使用这一行点击提交button

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

和这个,

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

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

convVeh_Form:j_idt21

另外,一旦能够点击button,响应将来自网站。 如何读取该响应文本,并将其放在应用程序的textview?

Solutions Collecting From Web of "填写网站数据,点击button,parsing响应"

你有一个单独的问题, convVeh_Form:j_idt21只是一个标签(在写作时)。 你想convVeh_Form:j_idt27 。 也许他们改变了?

您可能想要样式注入JavaScript和select器为document.querySelector('[id="convVeh_Form:j_idt27"]').click()

这绕过了:作为一个CSSselect器的目的特殊字符。

 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,你也可以使用button[type="submit"]作为select器,这样Ids就不再重要了。 (也许他们会改变呢?)
其他字段将是document.querySelectorAll('input[type="text"]')[0][1]

表单提交后,导航将会改变。 这会触发一个事件,您可以通过子类化WebView来挂钩。 举一个例子来看另一个问题的答案

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

使用它作为你的事件,检测端点上的URL,然后注入一些新的JavaScript来从页面中提取信息。 让我知道如果你需要更多的帮助。

正如我想出正确的id是convVeh_Form:j_idt26而不是

“JavaScript的:(函数(){的document.getElementById( 'convVeh_Form:j_idt21'。)点击();})()”

请检查我的链接来certificate它

所以,我的主要build议是在将其添加到Android之前,在浏览器中testing您的JS代码。 在Chrome中的debugging模式是非常好的,我相信你知道如何启用它。

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

例如首先把下面的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')点击()。

它可以分离你的JS逻辑,你会确定代码实际上是什么问题。

关于这一行:

另外,一旦能够点击button,响应将来自网站。 如何读取该响应文本,并将其放在应用程序的textview?

您应该实现自己的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 } } 

祝你好运!

PS上面的所有JS代码在我的浏览器中运行良好。

如何点击Id为convVeh_Form:j_idt21的button

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

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

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