我用TWebBrowser打开一个网页。网页上有很多Text,Radio和提交的Submit的Button,这些都没得说吧。其他问题就不争论怎么实现,我现在想实现的东西是:1、我可以让Text、Radio之类的东西获得焦点,用PossSendMessage实现的,但是我无法知道是哪个获得了焦点;
2、我想模拟鼠标点击那个Submit,进行表单的提交,而不想使用Form.Submit或者获得Submit的接口执行Click方法。请教大虾们给个思路!
能提供代码的大虾们万分感激!一直没研究过TWebBrowser的应用。工作中也用不上,所以了解很少。谢谢!

解决方案 »

  1.   

    正好我刚刚在我的博客上发表了这篇文章在Delphi中不使用控件遍历所有打开的页面内容或进行控制
    可以看看.
      

  2.   

    首先谢谢dl110!
    类似的代码我也见到过,不过据说如果在click或者submit之前有脚本的话,那用这两个方法脚本并不执行。
    所以我要直接模拟鼠标点击!很感谢您的回复,希望能继续讨论!
      

  3.   

    这个我倒没试过.
    但如果照你说的,应该是一个js脚本,例如校验代码之类的东西.
    如果你是针对特定网页(网站)进行的应用,那应该可以在分析网页源代码之后,将delphi代码固定下来.应该没有问题.
    例如:直接提交校验后的网页
      

  4.   

    我也曾将想过分析网页的源代码,之后来实现。
    但是如果那个网页再次改变呢?我还要再次分析源代码,然后再修改我的程序,对吧。但是点击那个submit,肯定是不会改变的过程,无论怎么提交(是不是有脚本),如果在网页上操作,都需要用鼠标去进行点击的。所以我想直接用模拟鼠标点击的办法直接些。其实我最开始就是分析了那个网页的源代码,然后使用了submit或者click来进行提交,开始也成功了。但是那个网页后来又改变了,我分析了很久,没找到具体修改的地方(可能是隐藏到后台的什么类里了吧,我也说不清楚)。用原来的方法怎么也提交不上,但是用鼠标去点那个submit,却一点问题没有。
      

  5.   

    那,那个submit是不是换成别的什么标记了?
    现在的网页代码标准新增了许多,再加上结合js脚本,几乎所有的标记都可以对鼠标的点击事件作出响应.
    确实有些困难.
      

  6.   

    mwy654321,在线我QQ:37630585,不过今天在公司加班,公司给封了。我可以上MSN:[email protected]
    可以上Gmail:[email protected]你看怎么联系方便?
      

  7.   

    那算了。你的问题没有表述清楚,你的问题一其实根本没有必要,因为控制IE的时候不需要让它得到焦点,照样可以控制。你的问题二,为什么不允许调用一个网页按扭的Click方法?
      

  8.   

        //下面是填写数据(输入x、y的坐标,我的xy的信息保存的字符串的格式是“aaa(x,y)”)
        sName := TListBox(lstSZName[nNowOutIndex]).Items[poi^.SZIndex_Next];
        nPos := Pos('(',sName);
        input := (doc.all.item('posX',0) as IHTMLInputElement);
        input.value := Copy(sName,nPos + 1,Pos(',',sName) - nPos - 1);
        //
        nPos := Pos(',',sName);
        input := (doc.all.item('posY',0) as IHTMLInputElement);
        input.value := Copy(sName,nPos + 1,Pos(')',sName) - nPos - 1);
        RichEdit3.Lines.Add('数据填写完毕...');
        //则两句是因为网页上的那个submit按钮,如果鼠标不放上去,那个按钮是灰色,即不可用的
        //这两句也是我参考别人的代码,可以让按钮在鼠标不移动到上面去的时候变为可用
        Ftn_FB:=(doc   as   IHTMLDocument3).getElementById('batBut');
        Ftn_FB.removeAttribute('disabled',0);
        //
        RichEdit3.Lines.Add('点击按钮...');
        //IHTMLDocument3(doc.all.item('batBut',0)).focus;
        form := (doc.all.item('actionForm',0) as ihtmlformelement);
        form.submit;
        RichEdit3.Lines.Add('点击按钮完毕...');
    =============================以上是我写的控制代码=====================================
    ... ... 
    <form id="actionForm" action="?x=LtIrLKLn2Ya2bzMVpDgMMrvMHkMrFv1k3hrTKXEiooWXFTRUCKb4sw" target="swin" method="post"><div style="display:none"><input type="hidden" name="actionForm_hf_0" id="actionForm_hf_0" /></div>
    ... ...
    这中间是要填写的text、要选择的radio、及要填写的xy坐标
    ... ...
    <p class="center" style="padding-top:10px;" onmouseover="_id$('batBut').disabled=false;"><button type="submit" id="batBut" disabled="true">确认</button></p>
    </form><div id="askMsgDiv" class="hide">
    <h4 class="msg_top">确认:</h4>
    <iframe name="swin" id="swin" class="msg_bottom" frameborder="0"></iframe>
    </div><div id="teamDiv" class="hide">
    <h4 class="msg_top">确认:</h4>
    <iframe name="twin" id="twin" class="msg_bottom" frameborder="0"></iframe>
    </div>
    ... ...
    ===============================以上是那个网页的代码(我捡中间控制部分)===============================这个网页要登录进才能看到这个网页,所以……
    你看上面提供的信息是否够用?麻烦了,谢谢先!
      

  9.   

    当在网页上点击“确认”后,会谈出一个再次确认的框(应该就是Frame了吧),再点那个弹出框上面的确认后,才算完事。上面我的控制的代码,前段时间用了很久都没事,可以弹出确认框,如今怎么也不行了。但是用鼠标直接点网页一切正常。
      

  10.   

    呵呵,用javascript来实现就行了,我刚做完,TWebBrowser中的接口有实现执行js的方法,代码在公司,你需要的话,==贴给你,接口在mshtml的单元文件中