gpt4 book ai didi

javascript - 无法使用 AsyncTask 在 Android 中获取动态更改的 HTML 内容(通过 JavaScript)。

转载 作者:太空宇宙 更新时间:2023-11-04 12:14:57 25 4
gpt4 key购买 nike

我正在使用 python 脚本来动态更改网页的内容。网页链接为:[HERE]

该网页包含有两列的表格:
1) 值在 1 到 5 之间。
2)以及页面上传的时间。

它由页面上的 JavaScript 动态显示。打开上面的链接查看页面来源。

现在我正在创建一个 Android 应用程序,它通过获取该页面并解析 HTML 来在 TextView 中显示值。但页面源仅包含 JavaScript 代码。因此,每当我获取 HTML 时,它都只显示 JavaScript,即使它包含多个带有值的行。

我的问题是如何动态获取这些值?

我正在使用 AsyncTask 并每 10 秒调度一次。我的代码是:

public class MainActivity extends AppCompatActivity {

TextView et ;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

et = (TextView) findViewById(R.id.editText);

DownloadWebPageTask task = new DownloadWebPageTask();
task.execute(new String[]{"https://rasppiclient.herokuapp.com/"});

callAsynchronousTask();

}



public void callAsynchronousTask() {
final Handler handler = new Handler();
Timer timer = new Timer();
TimerTask doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
DownloadWebPageTask performBackgroundTask = new DownloadWebPageTask();
// PerformBackgroundTask this class is the class that extends AsynchTask
performBackgroundTask.execute(new String[]{"https://rasppiclient.herokuapp.com/"});
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 10000); //execute in every 50000 ms
}



public class DownloadWebPageTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... urls) {
String response = "";
for (String url : urls) {
DefaultHttpClient client = new DefaultHttpClient();
HttpGet httpGet = new HttpGet(url);
try {
HttpResponse execute = client.execute(httpGet);
InputStream content = execute.getEntity().getContent();

BufferedReader buffer = new BufferedReader(new InputStreamReader(content));
String s = "";
while ((s = buffer.readLine()) != null) {
response += s;
}

} catch (Exception e) {


}
}
return response;
}

@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);

Toast.makeText(MainActivity.this,s,Toast.LENGTH_LONG).show();

}
}}

最佳答案

这不适用于 DefaultHttpClient。您可以做的是评估 javascript,然后使用 AndroidJSCore 获取内容.

JSContext context = new JSContext();
context.evaluateScript(yourJsString);
context.property("getWhatYouWantHere");

来自 github 的示例如下所示

JSContext context = new JSContext();
context.evaluateScript("a = 10");
JSValue newAValue = context.property("a");
System.out.println(df.format(newAValue.toNumber())); // 10.0
String script =
"function factorial(x) { var f = 1; for(; x > 1; x--) f *= x; return f; }\n" +
"var fact_a = factorial(a);\n";
context.evaluateScript(script);
JSValue fact_a = context.property("fact_a");
System.out.println(df.format(fact_a.toNumber())); // 3628800.0

关于javascript - 无法使用 AsyncTask 在 Android 中获取动态更改的 HTML 内容(通过 JavaScript)。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39511653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com