From 75a637caf64c7b61a00743a83cc0068fc6db4d99 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Tue, 16 Jul 2024 02:53:47 +0300 Subject: [PATCH] implement img extraction using js evaluating on webview --- .../mykola2312/outagefetch/MainActivity.kt | 24 ++++++++++++++++++- app/src/main/res/values/strings.xml | 1 + 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/mykola2312/outagefetch/MainActivity.kt b/app/src/main/java/com/mykola2312/outagefetch/MainActivity.kt index c822b4a..f63777d 100644 --- a/app/src/main/java/com/mykola2312/outagefetch/MainActivity.kt +++ b/app/src/main/java/com/mykola2312/outagefetch/MainActivity.kt @@ -1,7 +1,10 @@ package com.mykola2312.outagefetch +import android.annotation.SuppressLint import android.os.Bundle +import android.util.Log import android.view.ViewGroup +import android.webkit.ValueCallback import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient @@ -14,6 +17,7 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.viewinterop.AndroidView import com.mykola2312.outagefetch.ui.theme.OutageFetchTheme @@ -35,9 +39,10 @@ class MainActivity : ComponentActivity() { } } +@SuppressLint("SetJavaScriptEnabled") @Composable fun ExtractWebView() { - val url = "https://2ip.ua" + val url = stringResource(id = R.string.fetch_url) AndroidView(factory = { WebView(it).apply { @@ -45,17 +50,34 @@ fun ExtractWebView() { ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) + this.webViewClient = ExtractorClient() } }, update = { + it.settings.javaScriptEnabled = true it.loadUrl(url); }) } class ExtractorClient : WebViewClient() { + companion object ExtractConstants { + const val JS_EXTRACT = "document.getElementsByClassName(\"aos-init aos-animate\").item(0).children[4].lastChild.src"; + } + override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { return false } + + override fun onPageFinished(view: WebView?, url: String?) { + super.onPageFinished(view, url) + + view?.evaluateJavascript(JS_EXTRACT, ValueCallback { + if (it != null) { + val scheduleImgUrl = it.removeSurrounding("\"") + Log.i("extract", scheduleImgUrl) + } + }) + } } @Composable diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5735507..e414325 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,4 @@ OutageFetch + https://poweron.loe.lviv.ua/ \ No newline at end of file