如何提取含有iframe网页(HTML)的表格(table)数据
如何提取含有iframe网页(HTML)的表格(table)数据 
2008-09-23 17:24:54|  分类: Delphi |举报 |字号 订阅
如何提取含有iframe网页(HTML)的表格(table)数据
想提取网页里的表格(table标签)数据,因为session的原来,所以用了,但些网页被包含在一个iframe里,所以在论坛上到了一高人的代码(参考代码一),用FrameWin.document.body.outerHTML得到了源码,但问题是,我想得到table表里的数据,好像没有FrameWin.document.all.tags('table').item(0).outerHTML这种形式,但WebBrowser却有.如参考代码二,因为要提取的网页的表格是通过另一同级iframe网页的javascript赋值的,所以不能直接通过FrameWin.document.body.outerHTML用字符串直接分析,那样得的数据都是空格。 
大家有什么好办法。。 
参考代码一: 
usr  mshtml; 
procedure  TMainForm.ToolButton56Click(Sender:  TObject); 
var 
Index:            Integer; 
Document:      IHTMLDocument2; 
FrameIdx:      OleVariant; 
FrameDis:      IDispatch; 
FrameWin:      IHTMLWindow2; 
begin 
while  Webbrowser1.ReadyState  <>  READYSTATE_COMPLETE  do 
Application.ProcessMessages; 
if  WebBrowser1.Document  =  nil  then  Exit; 
if  WebBrowser1.Document.QueryInterface(IHTMLDocument2,  Document)  <>  0  then  Exit; 
if  Document.frames.length  >  0  then 
begin 
for  Index  :=  0  to  Document.frames.length  -  1  do 
begin 
FrameIdx  :=  Index; 
FrameDis  :=  Document.frames.item(FrameIdx); 
if  FrameDis.QueryInterface(IHTMLWindow2,  FrameWin)  <>  0  then  Exit; 
ShowMessage(FrameWin.document.body.outerHTML);     
//FrameWin.document  就是你要的每个  Frame  的文档 
end; 
end; 
end; 
参考代码二: 
procedure  Form1.Button1Click(Sender:  TObject); 
var  i,j  :  integer; 
GetTable  :  OleVariant; 
html document是什么
begin 
WebBrowser1.Navigate('/minalnew/MyHTML.htm'); 
while  WebBrowser1.ReadyState  <  READYSTATE_INTERACTIVE  do    //頁面激活 
Application.ProcessMessages; 
Memo1.Lines.Add(WebBrowser1.OleObject.Document.all.tags('table').item(0).outerhtml); 
GetTable:=  WebBrowser1.OleObject.Document.all.tags('table').item(0); 
For  i:=0  to  (GetTable.Rows.Length-1)  do 
begin 
For  j:=0  to  (GetTable.Rows.Item(i).Cells.Length-1)  do 
begin 
Memo2.Lines.Add(GetTable.Rows.Item(i).Cells.Item(j).innerhtml); 
end; 
end; 
end; 
解决了.不过是另开的一个贴子的办法解决的.爽.   
方法见:community.csdn/Expert/topic/l?temp=.4540979
Top
to:fayeflash(我爱阿菲) 
第一,用参考代码一的方法得到iframe的HTML源代码,类型为IHTMLDocument, 
第二,使用IHTMLTABLE,IHTMLRows,就可以正确得到网页表格数据了.就算表格数据是由javascript等脚本赋值也可以正确提出数据。 
附:如何从IHTMLDocument2里提取<table>里的所以数据
不能用正则表达式,因为table中表格的值是通过另一网页用javascript动态赋值的。 
好像 IHTMLDocument2没有WebBrowser1.document.all.tags('table').item(0).Rows.Item(i).Cells.Item(j).innerText这样的写法。
弄清楚下面的,要改写成用VARIANT写得软些也就很容易了.. 
uses  mshtml; 
function  GetHtmlTableCell(aTable:IHTMLTable;aRow,aCol:integer):IHTMLElement; 
var 
Row:IHTMLTableRow; 
node:IHTMLElement; 
begin 
Row:=ws.item(aRow,aRow)  as  IHTMLTableRow; 
Result:=lls.item(aCol,aCol)  as  IHTMLElement; 
end; 
function  GetHtmlTable(aDoc:IHTMLDocument2;aIndex:Integer):IHTMLTable; 
var 
list:IHTMLElementCollection; 
begin 
list:=aDoc.all.tags('table')  as  IHTMLElementCollection; 
Result:=list.item(aIndex,aIndex)  as  IHTMLTable; 
end; 
procedure  TForm1.Button1Click(Sender:  TObject); 
var 
Docintf:IHTMLDocument2; 
tblintf:IHTMLTable; 
begin 
tf:=WebBrowser1.Document  as  IHTMLDocument2; 
tblintf:=GetHtmlTable(tf,0); 
ShowMessage(  GetHtmlTableCell(tblintf,1,1).innerText); 
end; 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。