<A 
onclick="javascript:url_link('../DutyPage/DutySend.aspx?si=FEE92689-9EC3-C4E0-9ADE-DE05C9071C06    &amp;du=370aa11909844f679b386ac18542e1c6&amp;apidos=795010')" 
href="javascript:void(0);"> <FONT 
color=#ff0000>执行 </FONT> </A> </LI> </UL> </DIV> </DIV> 这“执行”是超链接文字,在一个叫“RIGHT_FORM"的嵌入框架里面,我要用DELPHI的WEBBROWSER控件显示出当前页面后模拟自动点击这2字已知:
Docs := Web.OleObject.Document; 
  Docs := Docs.GetElementByID('AddCont').ContentWindow.Document;  // <--到达iFrame //在iFrame里面寻找自己要的超链接   begin  
      with  (WebBrowser1.Document  as  IHTMLDocument2).body.all  as  
          IHTMLElementCollection  do  
          for  I  :=  0  to  length  -  1  do  
              with  item(I,  I)  as  IHTMLElement  do  
                  if  SameText(tagName,  'a')  then  
                      with  item(I,  I)  as  IHTMLAnchorElement  do  
                          if  SameText(href,  'http://www.csdn.net/')  then  click;  
  end; 这个方法能模拟点击吗?我试了不成功,原因是我对以上各个属性不熟悉,不知道分别要怎么定义,两段代码怎么搭配,朋友说有用,我也不知道怎么做,大家指导提示一下,谢谢了。

解决方案 »

  1.   

    针对这类问题,我觉得最方便的就是直接调用javascript实现。// IHTMLDocument2.parentWindow.execScriptCSDN的回复页面就用到了frame,replyframe就是回复页面的id
    参考如下javascript脚本:
    var replyframe = parent.document.getElementById("replyframe");
    if (replyframe)
    {
    var editor = replyframe.contentWindow.document.getElementById("tb_ReplyBody___Editor");
    editor.value = "zswang 路过";
    }参考如下调用方式:
    uses MSHTML;procedure TForm1.FormCreate(Sender: TObject);
    begin
      WebBrowser1.Navigate('http://topic.csdn.net/u/20080718/15/a34477ab-f82c-4ab8-b3b0-86adbf31022d.html');
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      vDocument: IHTMLDocument2;
    begin
      vDocument := WebBrowser1.Document as IHTMLDocument2;
      if not Assigned(vDocument) then Exit;
      vDocument.parentWindow.execScript(
    'var replyframe = parent.document.getElementById("replyframe");'#13#10 +
    'if (replyframe)'#13#10 +
    '{'#13#10 +
    ' var editor = replyframe.contentWindow.document.getElementById("tb_ReplyBody___Editor");'#13#10 +
    ' editor.value = "zswang 路过";'#13#10 +
    '}'#13#10, 'javascript')
    end;这下你只用关心如果写javascript脚本就可以了。推荐一个我写的脚本调试工具:IE脚本辅助2.0
      

  2.   

    楼上的高手我知道你,呵呵getElementById("tb_ReplyBody___Editor")这个是要根据元素的ID确定元素的,但是我说的“执行”这2个字全部属性都已经在上面,只是文字加个点击事件,不知道它的ID,用您的方法确认不了这个元素,如果能确认了的话直接点击就是了,也不用执行提交的JS了。呵呵,谢谢指教。
      

  3.   

    你把脚本变一下就成了。
    var replyframe = parent.document.getElementById("replyframe");
    if (replyframe)
    {
        var arr = replyframe.contentWindow.document.getElementsByTagName("a");
        for (var i = 0; i < arr.length; i++)
        {
            arr[i].click();
        }
    }
      

  4.   

    直接执行JS确实不错。但最好的方法是根据坐标直接发点击消息(鼠标并没有真正移过去点,但达到点击的效果),但如果网页在frame里面,而frame里面还嵌入了frame,那么复杂的多,没有200分以上,我实在没有精力考虑帮你写代码。
      

  5.   

    用脚本是最好的方法,我也是用的脚本,delphi直接调用脚本即可。还可以用webbrowser的事件来定位html中的元素,做出类似js对页面的控制效果。
      

  6.   

    用JS脚本或找到<a的ID后直接id.click();也行
      

  7.   

    把按钮的单击事件写成JS函数。调用JS函数就可以了。模拟点击太麻烦。