因为只有当这个网页显示完成后才能对这个网页上的元素进行操作,否则会出错的!

解决方案 »

  1.   

    你可以把操作放在onDocumentComplete事件中
      

  2.   

    OnDocumentComplete事件在网页中含有Frame时就不行了,每个Frame都会产生OnDocumentComplete事件,无法知道什么时候真正完成了。
    有一种方法可以判断网页是否真正完成了:var glpDisp: IDispatch = nil;procedure TForm1.WebBrowser1NavigateComplete2(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      if glpDisp = nil then glpDisp := pDisp;
    end;procedure TForm1.WebBrowser1DocumentComplete(Sender: TObject;
      const pDisp: IDispatch; var URL: OleVariant);
    begin
      if (glpDisp <> nil) and (glpDisp = pDisp) then begin
        glpDisp := nil;
        ShowMessage('完成.');
      end;
    end;原理是:第一次产生NavigateComplete2事件和最后一次产生DocumentComplete事件都是顶级(top-level)Frame,所以可以通过比较pDisp来判断是否完成。
    在微软网站上可以查到这种判断方法:
    http://support.microsoft.com/default.aspx?scid=KB;en-us;q180366
      

  3.   

    sysu(死树) 是真高手,能和你交个朋友常问问你多好