所以我在我的应用的网页浏览中加载了一个网页,然后是一个HTML i class="img profimage"
,它有一个背景图片网址,这是我的目标。 ..
我希望使用JavaScript或使用Jsoup来获取目标...
到目前为止我用Jsoup尝试的是:
public class GetImage extends AsyncTask<String, String, String> {
protected String doInBackground(String... strings) {
Document document = null;
try {
document = Jsoup.connect(url).get();
} catch (IOException e) {
e.printStackTrace();
}
String temp = document.select("i.img.profpic").first().getElementsByAttribute("style").toString();
return temp.substring(temp.indexOf("(") + 1, temp.indexOf(")"));
}
protected void onPostExecute(String result) {
Log.d("ChatScreen", result);
Toast.makeText(ChatScreen.this, result, LENGTH_SHORT).show();
}
}
但是我得到了NPE ......
我不知道如何使用JavaScript获取 i class 的背景图片网址...我可以在网上找到大量关于如何使用div
使用它的示例ids
页面的HTML结构与此类似:
<div ....>
<div ....>
<i class="img profimage" style="background-image: url("url here");"/>
</div>
</div>
答案 0 :(得分:0)
检查this Answer可能会有效,但我没有尝试过。 JS函数在 evaluateJavascript()中编写,它将读取样式属性,然后您可以使用substring方法来获取URL。
webview.evaluateJavascript(
"(function() { return (document.getElementsByTagName('i')[index].getAttribute('style')); })();",
new ValueCallback<String>() {
@Override
public void onReceiveValue(String html) {
Log.d("HTML", html);
// now use substring to get url.....
}
});
希望这对你有所帮助。
答案 1 :(得分:0)
引用this回答,您可以尝试下面的内容(假设它是类profimage
的唯一/第一个元素,否则更改索引,即[n]
,其中n
是索引)。或者,只需为元素添加唯一id
并使用document.getElementById('imgid')
并删除[0]
。将它包装在一个函数中,以防你想在特定事件上调用它。
function getUrl() {
var img = document.getElementsByClass('profimage'),
style = img[0].currentStyle || window.getComputedStyle(img[0], false),
bi = style.backgroundImage.slice(5, -2);
return bi;
}
切片会删除url("
之前和")
之后的网址。请注意,这将返回完整的URL。
如果这不起作用,您可以尝试style = img.style,
代替上面代码中的较长表达式,因为背景图片在元素本身中添加了内联css(<i ... style="background-image: url("url here");"/>
)。这将返回内联样式的url,在本例中为url here
。