Füllen Sie die Website-Daten aus und klicken Sie auf die Schaltfläche und analysieren Sie die Antwort

Ich möchte, dass Benutzer die Fahrzeugnummer eingeben und dann die Daten lesen und die Fahrzeugdetails dem Benutzer zeigen. Ich möchte es nicht in einem Webview machen. Ich bin in der Lage, die Daten mit diesem Code zu füllen:

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

Hier ist die Website, die die Daten für diese App zeigt.

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

Jetzt versuche ich, mit dieser Zeile auf die Schaltfläche "Senden" zu klicken

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

und das,

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

Aber sie arbeiten nicht. Wie klicke ich auf die Schaltfläche, deren Id ist

ConvVeh_Form: j_idt21

Auch wenn man einmal auf die Schaltfläche klicken kann, kommt die Antwort von der Website. Wie lese ich diesen Antworttext und stelle ihn in die Textansicht der App ein?

  • Phonegap - Wähle Bild aus der Galerie
  • Rufen Sie Android-Methoden von JavaScript an
  • Wie man Javascript-Code mit ADB in einem Browser öffnen Tab öffnen?
  • Phonegap, jQueryMobile und Web Service
  • Fehlertyp 3. Aktivitätsklasse {com.awesome_project / com.awesome_project.MainActivity} existiert nicht in native (Android-Gerät)
  • HTML5 Audio kann nicht durch Javascript spielen, es sei denn, manuell einmal ausgelöst
  • Reagieren Sie Native ListView TextInput sperrt von Performance-Optimierung Rendering
  • Math Gleichung in Android ausführen
  • 3 Solutions collect form web for “Füllen Sie die Website-Daten aus und klicken Sie auf die Schaltfläche und analysieren Sie die Antwort”

    Es gibt ein separates Problem, das du hast, convVeh_Form:j_idt21 ist nur ein Label (zum Zeitpunkt des Schreibens). Sie wollen convVeh_Form:j_idt27 . Vielleicht haben sie sich verändert?

    Vielleicht möchten Sie Ihre injizierten Javascript und selector als document.querySelector('[id="convVeh_Form:j_idt27"]').click() .

    Dies ruft um die : ein besonderes Zeichen für Zwecke eines CSS-Selektors.

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

    Du könntest auch die button[type="submit"] als wähler verwenden, wenn du weißt, dass es immer der erste Button ist, so dass die Ids nicht mehr wichtig sind. (Vielleicht werden sie sich wieder ändern?)
    Die anderen Felder wären document.querySelectorAll('input[type="text"]')[0] und [1] .

    Sobald das Formular eingereicht wird, ändert sich die Navigation. Dies löst ein Ereignis aus, das Sie durch Unterklassen des WebViews haken können. Sehen Sie diese Antwort für die andere Frage für ein Beispiel.

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

    Verwenden Sie das als Ihr Ereignis, ermitteln Sie die URL am Endpunkt und dann injizieren Sie ein neues Javascript, um die Informationen aus der Seite zu extrahieren. Lassen Sie mich wissen, wenn Sie mehr Hilfe benötigen.

    Wie ich herausgefunden habe, korrekte ID ist convVeh_Form:j_idt26 statt

    "Javascript: (function () {document.getElementById ('convVeh_Form: j_idt21') Klick ();}) ()"

    Bitte überprüfen Sie meinen Link , um es zu beweisen

    Also, mein Hauptanschlag ist, Ihren JS-Code im Browser zu testen, bevor er ihn zu Android hinzufügt. Debug-Modus in Chrome ist wirklich gut dafür, ich bin sicher, Sie wissen, wie es zu aktivieren.

    Danach, wenn Sie sicher, dass JS-Code funktioniert gut, fügen Sie bitte Code zu Android durch logische Blöcke. Das kann dir helfen, es zu debuggen

    Zum Beispiel zunächst die folgenden Zeilen des JS-Codes:

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

    Wenn du das Ergebnis auf dem Gerät gesehen hast, solltest du dann Click-Event hinzufügen.

    Document.getElementById ('convVeh_Form: j_idt26') klicken ()

    Es kann Ihre JS-Logik trennen und Sie werden sicher sein, was eigentlich falsch mit Code.

    In Bezug auf diese Zeile:

    Auch wenn man einmal auf die Schaltfläche klicken kann, kommt die Antwort von der Website. Wie lese ich diesen Antworttext und stelle ihn in die Textansicht der App ein?

    Sie sollten eigene WebViewClient() implementieren und onPageFinished überschreiben und JS-Code nur auf der richtigen Seite ausführen.

     @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 } } 

    Viel Glück!

    PS Alle JS-Code oben funktioniert gut im Browser auf meiner Seite.

    So klicken Sie auf die Schaltfläche, deren ID convVeh_Form: j_idt21 ist

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

    Wie lese ich diesen Antworttext und stelle ihn in die Textansicht der App ein? Wenn es eine Einreichung des Formulars ist, dann wäre es einfacher für diese Nachricht, um einen Anruf zu verwenden:

     $.ajax({ url: "http://your.url", }) .done(function( data ) { $('#textview').text(data); }); 
    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.