在 Android WebView 中过滤 DOM 元素,而无需 jQuery
Filter DOM elements in Android WebView without jQuery
我有一个安卓应用程序,可以从网络上检索和下载音频。
到目前为止,我所做的是使用 webview.loadUrl("some javascript code")
获取WebView
上显示的下载链接。
我想做的是获取下载链接的href属性并将其存储为String
。
但我有两个问题:
首先,有几个没有 id 或类的锚标记都在 id 为 "dl_links" 的div 下。所有这些锚标签都有一个 href 属性,但除了正确的下载链接之外,所有这些锚标签都有 display:none
.我不知道如何在不使用jQuery的情况下选择它。
用 JavaScript 加载的,因此显示下载链接之前和之后的网站 url 是相同的。起初我打算使用 jsoup 来提取我需要的 href 属性,但由于加载网页后的 url 是相同的,我不确定该怎么做。
我不明白你关于无法使用jSoup的第二部分,因为URL是相同的? 你能更好地解释一下吗?
无论如何,使用jSoup提取链接真的很容易。
Document doc = Jsoup.parse(pageHTML);
Elements pageLinks = doc.select("div#dl_links a");
ArrayList<String> theLinks;
theLinks= new ArrayList<String>(pageLinks.size());
if (pageLinks.size() > 0) {
for (Element lnk : theLinks) {
if (lnk.attr("style").contains("display:none"))
{
theLinks.add(lnk.attr("href"));
}
}
}
编辑
您也可以通过执行以下操作来缩短结果...
doc.select("div#dl_links a[style*=display:none]")
编辑 2
由于您需要在javascript之后获取信息,那么您将想要做这样的事情...
WebView.loadUrl("javascript:(function() { document.querySelectorAll('"button[type='submit']'")[0].click();})()");
上面的内容将单击需要单击的项目,以便显示新的 HTML。 您可能需要暂停或线程睡眠,以确保新文本已显示。 该程序是WebView没有允许您只阅读新HTML的好方法,因此如果您需要等到该特定文本出现在页面上,则需要研究这些方法,如果按下按钮后需要一段时间才能加载到页面上。
这不是一项"容易"的任务。 您可能希望参考此页面以获取想法和概念:如何从Web视图获取html内容?
一旦你完成了返回的HTML,那么你只需要在页面的HTML上做jSoup。
var dlHolder = document.getElementById('dl_links').querySelectorAll('a');
for (var i = 0; i < dlHolder.length; i++) {
if (dlHolder[i].tagName == 'A') {
if (dlHolder[i].style.display === 'none') {
alert(dlHolder[i].getAttribute('href'));
}
}
}
.hidden {
display: none;
}
<div id="dl_links">
<a href="#1">a1</a>
<a href="#2">a2</a>
<a href="#3">a3</a>
<a href="#4" class="hidden">a4</a> <!-- doesn't work -->
<a href="#5" style="display:none">a5</a> <!-- this should work -->
</div>
<a href="#6" style="display:none">a6</a> <!-- outside div -->
- Firefox赢得了'不会显示我添加的jquery元素,但Chrome会显示
- 使用返回函数sinde.attr()jquery元素
- Wooccommerce所有JS和Jquery元素都未加载
- 追加JQuery元素和Angular
- 如何获取jQuery集合中的第k个元素..作为JQUERY元素
- 是否存在jQuery元素选择库的最小化版本
- 不能同时通过类和数字 ID 选择 jquery 元素
- 为什么jquery元素在ipad上没有响应
- Jquery元素用法
- 用于获取jQuery元素或值的方法
- 淡入淡出切换jquery元素
- 用于查找在 jQuery 元素集中具有特定类的元素的索引的单行代码
- 选择具有由 data() 设置的某个值的 JQuery 元素
- Jquery 元素的高级过滤
- 链接到另一个带有jQuery元素的页面
- jQuery:通过 .wrap() 添加到 DOM 的 jQuery 元素上的切换类
- 将字符串转换为 jquery 元素并将其追加到 DOM 中
- 与“click”事件一起存储的jQuery元素未按要求工作
- 在哈希数组中保存对 jquery 元素的引用
- 如何从核心JavaScript选择中获取jquery元素