我在解析网站内容方面遇到了问题。 它是一个"数据存储"站点(网络文档),从中我需要数据来生成一些配置。
凡。
我正在使用HttpURLConnection
连接到该页面,没有任何问题。
将站点读入String并使用JSoup解析它。
在我的浏览器中打开页面时,我会得到以下元素:
<input type="text" name="b2" value="XXXXX" size="6" onfocus="return sbnrSel()" autocomplete="OFF" onkeyup="searchSuggest(this.id,'b2sel','getSTG?b2='+this.value,1)" onclick="document.getElementById('b2sel').style.display='none'" id="b2" class="muss" />
在查看我的字符串时,我发现以下元素:
<input type="text" name="b2" size="6" onfocus="return sbnrSel()" autocomplete="OFF" onkeyup="searchSuggest(this.id,'b2sel','getSTG?b2='+this.value,1)" onclick="document.getElementById('b2sel').style.display='none'" id="b2" class="muss" />
我想解析该值(在本例中为XXXXX)。 我的代码找不到它,因为没有&#34;值&#34;在元素中。 我在这里试图反驳它:
doc.getElementsByAttributeValue("name", "b2").first().attr("value"))
据我了解页面...它在代码中通过Java脚本加载时得到更新。但我不知道如何从我的JAVA代码中访问这些数据......
这是带有JS代码的HTML页面的开头:
<script src="/js/cuba-ng.js" type="text/javascript"></script>
<script src="/js/fchng.js" type="text/javascript"></script>
<script src="/js/jquery.js" type="text/javascript"></script>
<script src="/js/jquery.dataTables.js" type="text/javascript"></script>
<script type="text/javascript">//<![CDATA[
$(document).ready
( function()
{ $("#chan").dataTable( { "aaSorting": [[ 4, "desc" ]], "bPaginate": false, "bFilter": false } );
}
);
function sbnrSel()
{ if (document.forms[0].b3.value > 39) return;
var bnr = "xxxx";
bnr = document.forms[0].b1.value;
var sbnr = bnr.substr(1,3);
var ba = bnr.charAt(0);
switch (ba)
{ case "1": sba="I";break;
case "2": sba="O";break;
case "3": sba="B";break;
case "4": sba="D";break;
default: sba="Z";break;
}
document.forms[0].b2.value=sba+sbnr;
}
//]]></script>
不幸的是,我无法提供整个代码和数据。一些安全限制。希望你明白。
我能够通过Firefox插件查看引用的JS脚本。 似乎HTML中充满了JS数据表库。
期待您的支持。 对不起,如果有任何关键信息缺失。
答案 0 :(得分:0)
我通过使用不同的方式来访问侧面来解决这个问题。我没有使用HttpURLConnection,而是找到了HTMLunit Webclient。有了这个,我可以在回复中运行JavaScript代码。 请参阅使用的代码:
WebClient webClient = new WebClient();
WebRequest request;
request = new WebRequest(new URL(<enter URL here>));
Page page = webClient.getPage(request);
text = page.getWebResponse().getContentAsString();