想提取网页里的表格(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;参考:http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/document2/onclick.asp参考代码二:procedure Form1.Button1Click(Sender: TObject);
var i,j : integer;
GetTable : OleVariant;
begin
WebBrowser1.Navigate('http://www.chinaexplore.com.cn/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;
参考代码一: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;参考:http://msdn.microsoft.com/library/default.asp?url=/workshop/browser/mshtml/reference/ifaces/document2/onclick.asp参考代码二:procedure Form1.Button1Click(Sender: TObject);
var i,j : integer;
GetTable : OleVariant;
begin
WebBrowser1.Navigate('http://www.chinaexplore.com.cn/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;
解决方案 »
- 请问有没有可以设置不同的行以不同颜色显示的组件
- 高分求救 vb引用delqhi中的dll时 遇到的问题
- 很普遍的问题!SQL查询中如何对待英文状态下的单引号的问题?
- 请大家帮我看看。。。谢谢!!!
- 如何通过ADOCommand的Parameter输入Datetime字段
- ServerSocket建立连接后,如何能知道Client的MAC?
- 字符串操作问题
- 大送分了!同志们近来吧
- 如何判别access中的表是否存在,如果存在则删除!
- 用listview实现数据列表,如何按column排序?(点击一列就可以自动升、降序的那种)
- 微软拼音输入法2003太耗处理器
- InstallShield for D7配置的ODBC是不是不能包含中文目录?
有个很蠢笨的办法,就是把你获得的frame的代码保存到本地,然后浏览本地的文件,取得table里的innerText不知道行不行呢。也不知道能不能这个样子,就是WebBrowser1的内容不是浏览得来的,而是自己写进去的,如果行的话就不用保存成本地文件了,直接写进去,然后分析就行了。
有好的解决办法以后希望能告诉我,谢谢你了。
。QQ是:12416204。谢谢你。
to:fayeflash(我爱阿菲)
方法见:http://community.csdn.net/Expert/topic/3537/3537880.xml?temp=.4540979
第一,用参考代码一的方法得到iframe的HTML源代码,类型为IHTMLDocument,
第二,使用IHTMLTABLE,IHTMLRows,就可以正确得到网页表格数据了.就算表格数据是由javascript等脚本赋值也可以正确提出数据。
结贴!!!