大家好:
请教一下,idhttp控件,怎样取到网页js动态生成的内容,直接Get一个地址,取里的内容里,没有js生成的值
请教一下,idhttp控件,怎样取到网页js动态生成的内容,直接Get一个地址,取里的内容里,没有js生成的值
解决方案 »
- 我用canvas跟别人的圆不一样,有毛刺
- 控制Exce实现分类汇总
- 问个三层的问题,在应用层ADOQuery中写SQL语句,与在客户端ClientDataSet中写SQL语有什么区别没有?
- 菜鸟问最简单的问题:如何使用XPMenu控件
- 高手看看这个问题是不是没有解决的方法????????
- 急!请问:一运行,就出现System.pas文件,找不到的情况,但是明明有这个文件,求教各位高手!
- 想做个跟定时器相似的功能函数?
- 关于POPUPMENU的奇怪问题?
- 把一个ListBox的ITEM拖放到另一个ListBox的ITEM里,要怎样体现鼠标的变化?都用到哪些事件?
- 数据库更新时的一个奇怪错误?!
- 如何跨进程获取控件的名称呢?
- 请教一个关于浮点数比较的问题,对老答案的疑惑
用户webbrowser来获取页面内容并处理。
截包只能得到js的代码和调用的代码吧,它们运行的结果,应该无法截取到的
可以另外再取一次,但是,执行还是需要ie或者支持js的解释器才行,另外再取一次取得的也只是它的js源代码,没有它执行后的结果的
办法就是使用ie去执行js,再取它的结果
或自己利用一个js的解释器来执行,只怕了解起来更费劲。ie毕竟还是有很多接口、文档的
要么使用ie(即Twebbrowser),要么自己找一个js的解释执行模块
1.简单的JS代码,可以用DELPHI重写,然后取HTTP返回的相应值自行计算。
2.复杂的JS代码,无法重写,或者重写很辛苦的,可以用TScriptControl(WINDOWS自带)组件解析JS代码之后再获取相应的值。
例如:
(JS代码)JsCode:='function BaseNumRefEncode(str, fileSize ) {
var value = String(str);
var result = "";
for (var i = 0; i < value.length; i++) {
if (i > 0) { result += ","; }
var code = value.charCodeAt(i);
if ( code > 127 ){
return "_MMM_CCC_" + str ;
}
result += (parseInt( code ) + fileSize);
}
return result;
}';(DELPHI调用) function BaseNumRefEncode(mystr:string;FileSize:Integer):string;
var
obj:TScriptControl;
s,f:OleVariant;
Parameters:PSafeArray;
Bound:TSafeArrayBound;
Index:Integer;
begin
result:='';
obj:=TScriptControl.Create(nil);
try
obj.Language:='JavaScript';
obj.AddCode(JsCode);
s:=mystr;
f:=FileSize;
Bound.cElements:=2; //2个参数
Bound.lLbound:=0; //1维
try Parameters:=SafeArrayCreate(VT_Variant,1,Bound); Index:=0;
SafeArrayPutElement(Parameters,Index,s); Index:=1;
SafeArrayPutElement(Parameters,Index,f); result:=obj.Run('BaseNumRefEncode',Parameters);
finally
SafeArrayDestroy(Parameters);
end;
finally
Obj.Free;
end;
end;
但是,涉及js解释器,就只能 要么自己找解释器,要么借助于浏览器