本人遇到这样一个问题
首先在WebBrowser 打开网站地址列表
然后找出要点击的网址,方法如下:
procedure TForm1.Button2Click(Sender: TObject);
var
   J:integer;
   spDisp,p: IDispatch;
   IDoc1: IHTMLDocument2;
   ielc: IHTMLElementCollection ;
   ihtml:IHTMLElement;
   iane:IHTMLAnchorElement;
begin
   WebBrowser1.Document.QueryInterface(IHTMLDocument2,iDoc1);
   ielc:=idoc1.Get_all;
   for J:=0 to ielc.length-1 do
   begin
     Application.ProcessMessages;
     spDisp := ielc.item(J, 0);
     if SUCCEEDED(spDisp.QueryInterface(IHTMLAnchorElement ,iane))then
     begin
       if iane.href='http://www.xxx.com/' then  //要点击的网址
       begin
         ihtml:=ielc.item(J,0) as IHTMLElement;
         ihtml.click;
         buzhouflag:='4';
       end;
     end;
   end;
end;问题出来了
if SUCCEEDED(spDisp.QueryInterface(IHTMLAnchorElement ,iane))then  这句代码会抛出内存地址异常 
而且还是毫无规律的 有的时候就正常 有的时候就异常,
不知道这是为什么

解决方案 »

  1.   

    procedure TForm1.Button2Click(Sender: TObject); 
    var 
      J:integer; 
      spDisp,p: IDispatch; 
      IDoc1: IHTMLDocument2; 
      ielc: IHTMLElementCollection ; 
      ihtml:IHTMLElement; 
      iane:IHTMLAnchorElement; 
    begin 
      while WebBrowser1.ReadyState<>READYSTATE_COMPLETE  do
      begin
        application.ProcessMessages;
        sleep(20);
      end;  WebBrowser1.Document.QueryInterface(IHTMLDocument2,iDoc1);   if iDoc1<> nil then
      begin
        ielc:=idoc1.Get_all; 
        for J:=0 to ielc.length-1 do 
        begin 
          Application.ProcessMessages; 
          spDisp := ielc.item(J, 0); 
          if SUCCEEDED(spDisp.QueryInterface(IHTMLAnchorElement ,iane))then 
          begin         
            if iane.href='http://www.xxx.com/' then  //要点击的网址 
             begin 
              ihtml:=ielc.item(J,0) as IHTMLElement; 
              ihtml.click; 
              buzhouflag:='4'; 
            end; 
          end; 
        end;
      end; 
    end; 
      

  2.   

    谢谢 解决了 不过得去掉这个
     while WebBrowser1.ReadyState <>READYSTATE_COMPLETE  do 
      begin 
        application.ProcessMessages; 
        sleep(20); 
      end; 加上他程序就不动了 像死了一样 点什么都不动 不知道是怎么回事
      

  3.   

    建议用IWebBrowser2接口,绕过WebBrowser1控件直接操作windows系统的IWebBrowser2接口,
    然后这里
      while WebBrowser1.ReadyState <>READYSTATE_COMPLETE  do 
      begin 
        application.ProcessMessages; 
        sleep(20); 
      end; 

    while XXXXIWebBrowser2.Get_ReadyState<>READYSTATE_COMPLETE  do
    begin 
      application.ProcessMessages; 
      sleep(20); 
    end; 
    替换试试,应该不会死了的..还有,如果可以确定,有时可以有时不可以的话,可以用try  except ,然后在except里sleep一下,再执行一次原函数