RT
在某购物网上有各地商品报价,我想用程序对比这些报价
请问怎么在程序中点击某一表格(Cell)中的链接?
在某购物网上有各地商品报价,我想用程序对比这些报价
请问怎么在程序中点击某一表格(Cell)中的链接?
解决方案 »
- 关于DELPHI中的IN用法
- delphi 可以写病毒吗?(谁能给出代码,再加 100 分)
- 要读写mdb数据库到底有那些方法??
- 请问,可有用于delphi6的Rxlib控件包?若有,哪里有下载的,谢谢!
- D6的BUG?
- 如何获取adoquery查询得到的纪录?
- 请给一个中等规模Delphi消息示例代码,有注释的。
- 用delphi进行数据库编程大家都是用哪种连接数据库方式?
- 在ClientDataset控件中已经把数据查询出来了,如何把它做成本地的paradox数据库表,谢谢!!
- 如何在事件中获得返回值?
- BDE可以连SQL Server 2005吗?
- 如何复制一个数据库的结构到一个新的数据库
---------------------------------------------可以把Web页的HTML文本全部获取(idHTTP或WebBrowser都可以做到),把超级链接提取出来,放到一个数组里相应的位置(可以是二维数组的,根据HTML里的<table>等标记确定其属于哪个格子)
然后,需要链接哪个URL,就Navigate哪个。以WebBrowser为例:sURL := ARRAY[1,2]; //比如是'http://www.www.com'
WebBrowser1.Navigate(sURL);没有实战过,所以上面的话仅供参考。
================================================我比你更菜(今晚是第一次实战这个......)写了下面一个演示,看过的人不要笑我....虽然能实现,但我相信一定有更简练的办法....更不用说我的代码本身的不简练了(楼主可以用循环简化它) 不怕别人笑话了,贴出来!
--------------------------------------
测试环境:Delphi6 + WindowsXP + IIS
--------------------------------------
在你本机IIS虚拟目录的根目录里,放下面一个.htm一个.asp测试用。放在免费ASP空间也可,不过要改一下它们的超级链接路径。
--------------------------------------
<!-- test.htm --><html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>假想Web页</title>
</head>
<body>
<div align="center">
<center>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td width="50%"><a href="http://localhost/cell.asp?ID=00">Cell_00</a></td>
<td width="50%"><a href="http://localhost/cell.asp?ID=10">Cell_10</a></td>
</tr>
<tr>
<td width="50%"><a href="http://localhost/cell.asp?ID=01">Cell_01</a></td>
<td width="50%"><a href="http://localhost/cell.asp?ID=11">Cell_11</a></td>
</tr>
</table>
</center>
</div>
</body>
</html>
-------------------------------<!---- Cell.asp -----><%response.write ("您点击的是Cell_" & request("ID") & "格")%>---------------------------------unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, SHDocVw;type
TForm1 = class(TForm)
WebBrowser1: TWebBrowser; //这里我用的是WebBrowser,因为它直观。
Btn_Init: TButton; //这个按钮是用于读取Cells的超链接的
Btn_Cell_00: TButton;//下面四个按钮,分别链接四个格子的超链接
Btn_Cell_10: TButton;
Btn_Cell_01: TButton;
Btn_Cell_11: TButton;
Btn_GoBack: TButton; //每测试一个格子,就要点此按钮GoBack
procedure Btn_InitClick(Sender: TObject);
procedure Btn_GoBackClick(Sender: TObject);
procedure WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
procedure Btn_Cell_00Click(Sender: TObject);
procedure Btn_Cell_10Click(Sender: TObject);
procedure Btn_Cell_01Click(Sender: TObject);
procedure Btn_Cell_11Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementationuses MSHtml;//注意,引用MSHtml是为了用WebBrowser获得HTML源码{$R *.dfm}var
S, TempS : WideString;
URLs : array[0..1,0..1] of WideString;procedure TForm1.Btn_InitClick(Sender: TObject);
begin
WebBrowser1.Navigate('http://localhost/test.htm');
end;procedure TForm1.Btn_GoBackClick(Sender: TObject);
begin
WebBrowser1.GoBack;
end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
const pDisp: IDispatch; var URL: OleVariant);
begin
S := IHtmlDocument2(WebBrowser1.Document).Body.OuterHtml;//看这一部分代码时不要晕 ^_^
S := UpperCase(S);
//S := Copy(S, Pos('<TABLE',S), MaxInt);
//S := Copy(S, 1, Pos('</TABLE',S)+7);
TempS := Copy(S, 1, Pos('</TR', S));
TempS := Copy(TempS, Pos('A HREF="',TempS)+8, MaxInt);
TempS := Copy(TempS,1,Pos('">', TempS)-1);
URLs[0,0] := TempS; //这就是第00格的超级链接
TempS := Copy(S, Pos(URLs[0,0], S), MaxInt);
TempS := Copy(TempS, Pos('A HREF="',TempS)+8, MaxInt);
TempS := Copy(TempS,1,Pos('">', TempS)-1);
URLs[1,0] := TempS; //这就是第10格的超级链接
TempS := Copy(S, Pos(URLs[1,0], S), MaxInt);
TempS := Copy(TempS, Pos('A HREF="',TempS)+8, MaxInt);
TempS := Copy(TempS,1,Pos('">', TempS)-1);
URLs[0,1] := TempS; //这就是第01格的超级链接
TempS := Copy(S, Pos(URLs[0,1], S), MaxInt);
TempS := Copy(TempS, Pos('A HREF="',TempS)+8, MaxInt);
TempS := Copy(TempS,1,Pos('">', TempS)-1);
URLs[1,1] := TempS; //这就是第11格的超级链接
end;procedure TForm1.Btn_Cell_00Click(Sender: TObject);
begin
WebBrowser1.Navigate(URLs[0,0]);
end;procedure TForm1.Btn_Cell_10Click(Sender: TObject);
begin
WebBrowser1.Navigate(URLs[1,0]);
end;procedure TForm1.Btn_Cell_01Click(Sender: TObject);
begin
WebBrowser1.Navigate(URLs[0,1]);
end;procedure TForm1.Btn_Cell_11Click(Sender: TObject);
begin
WebBrowser1.Navigate(URLs[1,1]);
end;end.
//仅仅是测试和演示而已........实际上不复杂,令人头痛的地方,就是反复用Pos和Copy去取一段段的字符串......
我先获取指定的表(TabList.item((OleVariant(I)), Varempty) As IHTMLTable),然后用这个(MainTab.rows.item(OleVariant(M), varempty) as IHTMLTableRow)取某行,再取某个单元格的Html(tRow.cells.item(OleVariant(J), varempty) as IHTMLElement).innerHTML)再作处理的。