RT
在某购物网上有各地商品报价,我想用程序对比这些报价
请问怎么在程序中点击某一表格(Cell)中的链接?

解决方案 »

  1.   

    请问怎么在程序中点击某一表格(Cell)中的链接?
    ---------------------------------------------可以把Web页的HTML文本全部获取(idHTTP或WebBrowser都可以做到),把超级链接提取出来,放到一个数组里相应的位置(可以是二维数组的,根据HTML里的<table>等标记确定其属于哪个格子)
    然后,需要链接哪个URL,就Navigate哪个。以WebBrowser为例:sURL := ARRAY[1,2]; //比如是'http://www.www.com'
    WebBrowser1.Navigate(sURL);没有实战过,所以上面的话仅供参考。
      

  2.   

    可否考虑使用POS来进行截取呢?
      

  3.   

    对,“HTML文本全部获取(idHTTP或WebBrowser都可以做到),把超级链接提取出来”-----提取时,就需要用到POS、POSEX、COPY等字符串函数了。
      

  4.   

    如何通过超链确定所属的Cells呢?(我实在太菜了啊)
      

  5.   

    可以get啊,在返回的字符中用pos找啊
      

  6.   

    如何通过超链确定所属的Cells呢?(我实在太菜了啊)
    ================================================我比你更菜(今晚是第一次实战这个......)写了下面一个演示,看过的人不要笑我....虽然能实现,但我相信一定有更简练的办法....更不用说我的代码本身的不简练了(楼主可以用循环简化它)  不怕别人笑话了,贴出来!
    --------------------------------------
    测试环境: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去取一段段的字符串......
      

  7.   

    谢谢各位的热心帮助,问题已解决。
    我先获取指定的表(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)再作处理的。