如何读取js函数的数据 在做一个项目时,需要分析html文件的源码,我选择用htmlparser,但是在解析源码的时候发现,页面的数据是动态的利用javascript函数从后台中导入的,试问如何读取js函数中的值? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这个好像不行吧。建议你使用HttpConnection, 然后getinputstream(),把包含了动态内容的Html源码分析出来。 我用过httpurlconnection,连接以后getInputstream()以后,保存下来都是网页阿?他怎么将html动态内容分析出来呢?谢谢! 比如当查询的时候,后台将查询的数据先存放在一个数组data中,然后调用js函数将其赋值到表中,那么我怎么取出这个data的值呢? data 应该不在当前页面里面,是不是当你点查询的时候才有数据显示?如果是这样的话,应该是 js 与 后台有个交互的过程取数据,也就是 js 应该发了另一个请求,数据也该在另一个也面里而不在当前页面 将查询的链接再 urlconnection 一次得到的网页就有你需要的 data 感谢楼上各位的支持。下面是提交表单后所在html页面的部分源代码:<BODY><form id=InputForm><INPUT class=txtLT value=统一编号 style="LEFT: 5px; TOP: 5px; WIDTH: 80px;" readonly style="background-color:#e7e7e7" readonly validator = none nullFlg=可空><INPUT class=txtLT id=txt_seq_no title=统一编号 style="LEFT: 85px; TOP: 5px; WIDTH: 160px;" style="background-color:#e7e7e7" maxLength=18 readonly validator = 数字型 nullFlg = 可空 ><INPUT class=txtLT value=报关单编号 style="BACKGROUND-COLOR: #e7e7e7; LEFT: 229px; TOP: 5px; WIDTH: 81px;" readonly validator = none nullFlg=可空><INPUT class=txtLT id=txt_entry_id title=报关单编号 style="background-color:#e7e7e7; LEFT: 310px; TOP: 5px; WIDTH: 135px;" maxLength=9 readonly validator = none nullFlg = 可空 ><INPUT class=txtLT value=备案号 style="BACKGROUND-COLOR: #e7e7e7; LEFT: 435px; TOP: 5px; WIDTH: 64px;" readonly validator = none nullFlg=可空><INPUT class=txtLTR id=txt_manual_no title=备案号 style="LEFT: 485px; TOP: 5px; WIDTH: 160px;" maxLength=12 tabIndex =0 validator = none nullFlg = 可空 ><INPUT class=txtLT value=申报地海关 style="BACKGROUND-COLOR: #e7e7e7; LEFT: 5px; TOP: 26px; WIDTH: 80px;" readonly validator = none nullFlg=可空><INPUT class=txtLT id=txt_custom_master title=申报地海关 style="LEFT: 85px; TOP: 26px; WIDTH: 144px;" maxLength=4 tabIndex =1 validator = 任意型 nullFlg = 非空 ><INPUT class=txtLT value="出口口岸" style='BACKGROUND-COLOR: #e7e7e7; LEFT: 229px; TOP: 26px; WIDTH: 81px;' readonly validator = none nullFlg=可空></form></BODY>这个是对表单赋值的js函数:<SCRIPT src="../Lib/copyFromSevletToTitle.js"></SCRIPT>var DataValue="";var DataArry=new Array();function WriteForm() { if (window.opener!=null) DataValue=window.opener.top.title.BGDData.value; else DataValue=top.title.BGDData.value; DataArry=DataValue.split("||"); InputForm.txt_seq_no.value=DataArry[0]; InputForm.txt_entry_id.value=DataArry[1]; InputForm.txt_manual_no.value=DataArry[2]; InputForm.txt_custom_master.value=getCodeOrCHN("DEC","TXT_I_E_PORT",DataArry[3],1,0) InputForm.txt_i_e_port.value=getCodeOrCHN("DEC","TXT_I_E_PORT",DataArry[4],1,0) InputForm.txt_contr_no.value=DataArry[5]; InputForm.txt_i_e_date.value=DataArry[6]; InputForm.txt_d_date.value=DataArry[7]; InputForm.txt_bill_no.value=DataArry[8]; }因为源码中没有直接的数值,我如何获取页面中的信息?谢谢 ! 直接是没有办法取到的,但是楼主可以这样做,因为我这里的项目正好也有过这样的需求,我当时就是这么做的:看你的html中有window.opener.top.title.BGDData.value这个东西你可以在这里模拟发起http请求,然后再带上一个参数,值就是window.opener.top.title.BGDData.value再自己写个请求目的地,再进行参数解析 你可以在这里模拟发起http请求,然后再带上一个参数,值就是window.opener.top.title.BGDData.value 再自己写个请求目的地,再进行参数解析. 您这几句说的我不是很清楚,我得场景如下:提交查询表单,然后返回查询内容。那么您说的模拟发起http请求,这个url,是查询前的地址,还是查询后返回信息的地址?这个参数值是window.opener.top.title.BGDData.value ?这样写入么?outputStream os = httpurlConnection.getOutputStream,os.writer(window.opener.top.title.BGDData.value ); os.close();感谢不吝赐教。 var xxx=$F{xxx.xxx}取不到嗎? 你是说在javascript里面实现么? 是啊,何必搞得這么復雜java不就是要簡單嗎 反正只要不連數據庫什么的太麻煩的業務你稍微寫點function也很正常啊,判斷什么的除非你們老大要求你一定要用這種方法 是啊你取得了 數據以后 放到一個隨便什么地方 比如form 或者 list 在從里面拿不行?==========================而是js函数调用,引用了某个数组或者直接從這個數組里面拿好了。。 数据肯定也是要查出来的吧。就算用的JS,那也是JS发的请求去查的。你用JAVA模拟一个请求可以不? 尝试过用httpurlconnection进行模拟一次提交过程,但是返回来的页面的源码没有直接的表单内容而是通过调用js函数来得到数据,我用htmlparser分析是不能得到的,httpurlconnection不能解析js函数,希望大家不吝赐教。 htmlparser 不能解析js的httpunit 好像可以解析js httpunit能够取到js函数中的内容? 如楼上几位说过的,你应该去看看window.opener.top.title.BGDData.value这个是怎么回事?你能解析那个,就可以了! 老紫竹大大,可是我怎么能拿到window.opener.top.title.BGDData.value?万分感谢! 我从流中搜出来但只是window.opener.top.title.BGDData.value,而不是值,怎样得到值呢? 没做过这种应用, JAVA 6 有解析 JAVASCRIPT 的方法, 你可以研究一下. 我倒是研究了一下java 6 中的解析javascript的方法,其中写有:scriptEngine.eval(new FileReader("http://www1.chinaport.gov.cn/rtx/Qy_I//Lib/copyFromSevletToTitle.js"));却报出这样的错误:java.io.FileNotFoundException: http:\www1.chinaport.gov.cn\rtx\Qy_I\Lib\copyFromSevletToTitle.js (文件名、目录名或卷标语法不正确。) 这个问题是因为filereader读的本地硬盘的数据。 需要答案 Up upup jsp分页问题? J调试SP+SQL时候出现的问题额 一个线程中有必要创建多个Statement吗 问卷调查系统的设计 关于<select>标签的问题 请教:在eclipse中如何导入jsp? 急急急!!! 关于连接池的泄漏问题 急!急!急!谁有这个原代码? jsp使用在线编辑器的问题 DAO接口问题,请看一下是哪里出问题了 java调用c#编写的WebService的问题 关于struts2的datetimepicker标签国际化问题
如果是这样的话,应该是 js 与 后台有个交互的过程取数据,也就是 js 应该发了另一个请求,数据也该在另一个也面里
而不在当前页面
得到的网页就有你需要的 data
下面是提交表单后所在html页面的部分源代码:
<BODY>
<form id=InputForm>
<INPUT class=txtLT value=统一编号 style="LEFT: 5px; TOP: 5px; WIDTH: 80px;" readonly style="background-color:#e7e7e7" readonly validator = none nullFlg=可空>
<INPUT class=txtLT id=txt_seq_no title=统一编号 style="LEFT: 85px; TOP: 5px; WIDTH: 160px;" style="background-color:#e7e7e7" maxLength=18 readonly validator = 数字型 nullFlg = 可空 >
<INPUT class=txtLT value=报关单编号 style="BACKGROUND-COLOR: #e7e7e7; LEFT: 229px; TOP: 5px; WIDTH: 81px;" readonly validator = none nullFlg=可空>
<INPUT class=txtLT id=txt_entry_id title=报关单编号 style="background-color:#e7e7e7; LEFT: 310px; TOP: 5px; WIDTH: 135px;" maxLength=9 readonly validator = none nullFlg = 可空 >
<INPUT class=txtLT value=备案号 style="BACKGROUND-COLOR: #e7e7e7; LEFT: 435px; TOP: 5px; WIDTH: 64px;" readonly validator = none nullFlg=可空>
<INPUT class=txtLTR id=txt_manual_no title=备案号 style="LEFT: 485px; TOP: 5px; WIDTH: 160px;" maxLength=12 tabIndex =0 validator = none nullFlg = 可空 >
<INPUT class=txtLT value=申报地海关 style="BACKGROUND-COLOR: #e7e7e7; LEFT: 5px; TOP: 26px; WIDTH: 80px;" readonly validator = none nullFlg=可空>
<INPUT class=txtLT id=txt_custom_master title=申报地海关 style="LEFT: 85px; TOP: 26px; WIDTH: 144px;" maxLength=4 tabIndex =1 validator = 任意型 nullFlg = 非空 >
<INPUT class=txtLT value="出口口岸" style='BACKGROUND-COLOR: #e7e7e7; LEFT: 229px; TOP: 26px; WIDTH: 81px;' readonly validator = none nullFlg=可空>
</form>
</BODY>
这个是对表单赋值的js函数:
<SCRIPT src="../Lib/copyFromSevletToTitle.js"></SCRIPT>
var DataValue="";
var DataArry=new Array();
function WriteForm() {
if (window.opener!=null) DataValue=window.opener.top.title.BGDData.value;
else DataValue=top.title.BGDData.value;
DataArry=DataValue.split("||"); InputForm.txt_seq_no.value=DataArry[0];
InputForm.txt_entry_id.value=DataArry[1];
InputForm.txt_manual_no.value=DataArry[2];
InputForm.txt_custom_master.value=getCodeOrCHN("DEC","TXT_I_E_PORT",DataArry[3],1,0)
InputForm.txt_i_e_port.value=getCodeOrCHN("DEC","TXT_I_E_PORT",DataArry[4],1,0)
InputForm.txt_contr_no.value=DataArry[5];
InputForm.txt_i_e_date.value=DataArry[6];
InputForm.txt_d_date.value=DataArry[7];
InputForm.txt_bill_no.value=DataArry[8];
}
因为源码中没有直接的数值,我如何获取页面中的信息?谢谢 !
看你的html中有window.opener.top.title.BGDData.value这个东西
你可以在这里模拟发起http请求,然后再带上一个参数,值就是window.opener.top.title.BGDData.value
再自己写个请求目的地,再进行参数解析
再自己写个请求目的地,再进行参数解析.
您这几句说的我不是很清楚,我得场景如下:提交查询表单,然后返回查询内容。那么您说的模拟发起http请求,这个url,是查询前的地址,还是查询后返回信息的地址?这个参数值是window.opener.top.title.BGDData.value ?这样写入么?outputStream os = httpurlConnection.getOutputStream,os.writer(window.opener.top.title.BGDData.value ); os.close();感谢不吝赐教。
java不就是要簡單嗎
你稍微寫點function也很正常啊,判斷什么的
除非你們老大要求你一定要用這種方法
你取得了 數據以后 放到一個隨便什么地方 比如form 或者 list 在從里面拿不行?
==========================
而是js函数调用,引用了某个数组或者直接從這個數組里面拿好了。。
就算用的JS,那也是JS发的请求去查的。
你用JAVA模拟一个请求可以不?
httpunit 好像可以解析js
window.opener.top.title.BGDData.value
这个是怎么回事?
你能解析那个,就可以了!
却报出这样的错误:java.io.FileNotFoundException: http:\www1.chinaport.gov.cn\rtx\Qy_I\Lib\copyFromSevletToTitle.js (文件名、目录名或卷标语法不正确。)