Wie bekomme ich Realtime Content (also der Conten ändert sich lauften) aus einem WebView?

  • Antworten:4
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 10

20.04.2017, 22:12:18 via Website

Hallo liebe Community,

Und zwar will ich aus dem WebView einen bestimmten Content (Zahl) her raus holen und diese in meiner APP separat darstellen, was auch wunderbar klappt.

Doch habe ich das Problem, dass sich diese Zahl ständig ändert und nur die am Anfang geladen Zahl in meiner APP angezeigt wrd.

Nun würde ich gerne wissen, wie ich immer die veränderte Zahl aus dem WebView bekomme ohne das WebView neu zu laden.

Ich brauche genau diese Zahl, weil Sie bei jedem User unterschiedlich ist und ich keine API oder Jsoup dafür verwenden kann.

Die Webseite ist eine Bitcoins Dice Seite und ich würde da gerne den Balance (Bitcoins) Wert heraus holen.

Ist das überhaupt möglich?

Hier ist der Code mit dem ich diese Zahl aus dem WebView (Webseite) hole.

mWebView.getSettings.setJavaScriptEnabled(true);

class MyJavaScriptInterface
    {
        @JavascriptInterface
        @SuppressWarnings("unused")
        public void processHTML(String html)
        {
            mTitle = html;
        }
    }

    mWebView.addJavascriptInterface(new MyJavaScriptInterface(), "HTMLOUT");
    mWebView.loadUrl("dieWebseite");

und

        mWebView.setWebViewClient(new WebViewClient() {

        @Override
        public void onPageFinished(WebView view, String url) {


           mWebView.loadUrl("javascript:window.HTMLOUT.processHTML(document.getElementsByClassName('index__home__header__balance__btc')[0].textContent);");

text.setText(mTitle);

}

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (Uri.parse(url).getHost().endsWith("dieWebseite")) {
                return false;
            }

            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            view.getContext().startActivity(intent);
            return true;
        }

});

MfG

Antworten
  • Forum-Beiträge: 2.902

20.04.2017, 22:27:49 via Website

Hallo Basti,

so wie du das oben gemacht hast , scheint ja alles richtig zu sein .

GGf könnte man noch einnen Consolen-Out realisierten ( auch mit Injection)

Nun würde ich gerne wissen, wie ich immer die veränderte Zahl aus dem WebView bekomme ohne das WebView neu zu laden.

Das bringt mich etwas ins grübeln. wenn sich die Zahl doch im Content ändert , dann bleibt dir doch nichts anders übrig, als ein Reload zu machen .
Oder ich habe schlichtweg nicht verstanden , was du genau möchtet

Du brauchst auch keine Jsoup, du kannst auch mit XMLParser arbeiten oder komplett auf ASCII Basis parsen.
Aber warum denn kein Jsoup ??

EDIT : shouldOverrideUrlLoading würde ich an dieser Stelle nicht verwenden , sondern das Javascript im onFinished einfach nachladen

— geändert am 21.04.2017, 11:32:05

Liebe Grüße - Stefan
[ App - Entwicklung ]

Basti Müller

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.173

21.04.2017, 10:27:11 via App

Ich würd erstmal dir Seite analysieren.
Wenn du sagst da ändert sich eine Zahl dann hört sich das für mich nach jQuery an mit der in Hintergrund etwas nachgeladen wird.
Moderne Webseiten laden Content über eine Api mit jQuery nach du müsstest dann nur wissen wie der Api Request aussieht, dann ists einfach und im Prinzip ein Json parse.
Dies kannst du z.b. im Firefox sehr leicht mit Firebug nachvollziehen.
Wie heißt denn die Seite?

— geändert am 21.04.2017, 10:28:12

LG Pascal //It's not a bug, it's a feature. :) ;)

Basti Müller

Antworten
  • Forum-Beiträge: 10

21.04.2017, 12:25:03 via Website

Hallo und danke euch beiden für die Antworten.

Also bei dieser Seite handelt es sich um eine Bitcoins Gambing Seite (Primedice).

Von dieser Seite brauch ich halt die Balance an Bitcoins über Javascript, weil es keine API bzw. XML Datei für diese Bitcoins Balance für einzelne User gibt.

Diese Balance an Bitcoins ändert sich jedes mal, wenn man gewettet hat (es kann sich alle Sekunde die Zahl ändern).

Darum muss ich es mit dem Javascript bzw. JavaScriptInterface.

Ich werde das mal ausprobieren was ihr gesagt habt.

Edit: und zwar habe ich es mit folgendem Code nochmal bei OnPageFinish versucht:

                mWebView.loadUrl("javascript:document.getElementsByTagName('button')[11].onclick = function(){window.HTMLOUT.processHTML(document.getElementsByClassName('index__home__header__balance__btc')[0].textContent);};");

Doch hatte ich leide keinen Erfolg. Habe ich bei dem Code ein Fehler gemacht?
Wenn ja könntet Ihr ihn vielleicht sagen.

Danke

MfG

— geändert am 21.04.2017, 13:47:45

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.173

21.04.2017, 14:17:29 via Website

  1. gibt es eine API: https://primedice.com/api
  2. Mach es ohne WebView, lade den Content jedes mal neu und parse die Darten dann da raus, über eine WebView macht man das nicht im normalfall

LG Pascal //It's not a bug, it's a feature. :) ;)

Basti Müller

Antworten

Empfohlene Artikel