如何提取含有iframe网页的表格数据

如题所述

如何提取含有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;   
  begin   
      WebBrowser1.Navigate('
);   
          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;


   å¦å¤–:

  第一,用参考代码一的方法得到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写得软些也就很容易了..    

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-07
如何提取含有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用字符串直接分析,那样得的数据都是空格。

大家有什么好办法。。

参考代码一:

1234567891011121314151617181920212223242526 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;

参考代码二:

12345678910111213141516171819 procedure Form1.Button1Click(Sender: TObject); var i,j : integer; GetTable : OleVariant; begin WebBrowser1.Navigate('); 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;

另外:

第一,用参考代码一的方法得到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写得软些也就很容易了..

如何提取含有iframe网页的表格数据
使用IHTMLTABLE,IHTMLRows,就可以正确得到网页表格数据了.就算表格数据是由javascript等脚本赋值也可以正确提出数据。附:如何从IHTMLDocument2里提取<table>里的所以数据 不能用正则表达式,因为table中表格的值是通过另一网页用javascript动态赋值的。 好像 IHTMLDocument2没有WebBrowser1.document.all...

iframe嵌套网页,子页面高度增加,iframe高度也会增加.列如:子页面是一...
1、首先你要明确:选择条数之后,触发了事件令子页面的body高度改变了,因此我们要捕捉到这个事件,即:$("body").resize(function(){});2、捕捉到事件后,我们要利用window.parent改变父页面的容器的高度。如:在父页面写个方法 function changeHeight(height){\/\/\/改变装iframe的容器div的高度} 然后...

表格单元格中插入Iframe
在纯html环境中,让iframe去自适应网页的宽度和高度,有些困难。倒不如定义一个合理高宽度的iframe,让网页去适应它呢。你的001.htm中是不是用表格了。看看你的表格的宽度和高度是用百分比表示的呢还是用数值表示的呢?用百分比的应该没有问题的。

iframe导致 el-table表格错位
让table重新布局。发生错位的原因,是由于table在数据请求后,渲染异常的问题。FRAME 元素也就是文档中的文档,或者好像浮动的框架(FRAME)。frames 集合提供了对 IFRAME 内容的访问。请使用 frames 集合读写 IFRAME 内包含的元素。通过 iframe 对象所在页面的对象模型,你可以访问 iframe 对象的属性,但不...

在一个网页中导入另外一个网页用什么命令?
要是你做的是静态的网页的话,可以用<iframe src=""width="" height="">关于<iframe>的其他参数自己去查了,当然你也可以用框架对整个网页布局,<frameset row="" cols=""> <frame src=""> <\/frame> <frame src=""> <\/frame> <\/frameset> 动态的网页还可以采用<include>具体代码是;<...

html网页中如何调用另一个html网页的指定一部分
<p align="center" style="margin-top: -109;margin-left: -109">是布局的关键,margin-top: -109表示顶部缩进109px,margin-left: -109表示左边缩进109px。至于右边和底部缩进,很简单,修改<iframe>的宽度和高度就可以了。但这样有些网页会自动跳转,所以加上security="restricted" sandbox="",...

怎么在网页中弄好的虚的表格中再添加另一个网页,要代码
iframe 框架,只要你写了地址,浏览器会自动加载的。看我做的网站,信息9000 你在上面点 "查找信息" 或“删除信息”就是这样的

关于IFRAME的问题,我现在需要用页面中插入IFRAME代码来给另一个页面输...
如果要访问 iframe 内 body 对象的 backgroundColor 样式,语法应为: sColor = document.frames("sFrameName").document.body.style.backgroundColor; 通过 iframe 对象所在页面的对象模型,你可以访问 iframe 对象的属性,但不能访问其内容。例如,访问 iframe 对象的 border 样式的语法应为: sBorderValue = document...

如何在DREAMWEAVER中表格中显示另一网页的内容
在表格中加一个框架...<iframe src="另一网页"><\/ifame>。就可以显示了,需要的时候调一下框架大小。

如何去掉框架网页的边框
你好 首先,楼上的方法是指基本所有的带有边框的层或者表格的边框设置为零 但是相对于 frameset 和 iframe 这几个,本身有自己的特性,所有用 border=0是起不到效果的 应该是用 frameborder="0"并且滚动条的也有点不同,frameset 之类的可以直接的写 scrolling="no"设置不要有滚动条 如果单独要竖...

相似回答