我用WebBrowser控件来显示网页,重而控制网页里的每个元素,来实现自动登陆,发言功能,这些都运行正常,我不可能总是用同1个ID来发言吧,我就写了个Timer来控制,每隔一段时间就换个ID,这个时候就出问题了,应为那个网页没有登出按钮,所以我所有的操作都是在前一个ID的基础上发生的,所以当我用第2个ID登陆时根本找不到登陆的2个元素了(因为第一个ID还处于登陆状态),以前在IE中都是直接关了IE在换个ID登陆的,这次IE嵌入到WebBrowser控件里了,我是过了Free的方法来释放WebBrowser可是没用,而且WebBrowser也是动态生成的~
请问高手,怎么在WebBrowser中关闭网页,或者登出那个ID???procedure TForm1.Timer1Timer(Sender: TObject);
var
  ov: OleVariant;
  i:integer;
begin
  if (iCtrl=0) then
  begin
   wb:=TWebBrowser.Create(Form1); //我在这里生成了个WebBrowser
   TWinControl(wb).Parent:=Form1;
   wb.Width:=1;
   wb.Height:=1;
   wb.Align:=altop;
   wb.Navigate('http://www.xici.net/club_Junshi.asp'); //去登陆页面
   Timer1.Interval:=iInterval;
  end;
  if (iCtrl=1) then
  begin                 //查找用户名,密码对话框和登陆按钮,写入数据
    ov :=wb.OleObject.document.all.item('UserName',0); 
    ov.Value :=eName.text+IntToStr(iCount+strtoint(eFrom.text));
    ov := wb.OleObject.document.all.item('Password',0);
    ov.Value := '1234567';
    ov := wb.OleObject.document.all.item('do',1);
    ov.click;  //登陆
    Timer1.Interval:=iInterval;
  end;
  if (iCtrl=2) then
  begin  //去另外个功能的页面
    wb.Navigate('http://www.xici.net/board/bdlink.asp?id='+eBoard.Text);
    Timer1.Interval:=iInterval;
  end;
  if (iCtrl=3) then
  begin  
    ov :=wb.OleObject.document.all.item('Add',0);
    ov.click; 
    Timer1.Interval:=iInterval;
  end;
    if (iCtrl=4) then  
//一个操作循环完成后的处理,他将返回开始执行,换第2,3,4个ID来操作
  begin
    iCtrl:=-1;
    iCount:=iCount+1;
    if (iCount=(StrToInt(eTo.Text)-StrToInt(eFrom.Text))) then Timer1.Enabled:=False;
    wb.Free;
    Timer1.Interval:=1000;
  end;
  iCtrl:=iCtrl+1;
end;我的问题就是1个循环后由于原来的ID没有登出,所以下面的无法操作了~

解决方案 »

  1.   

    登录页面上应该有个FORM,它的ACTION就是处理用户名和密码的ASP,把它的URL得出来,自己根据需要更改用户名和密码就可以了
      

  2.   

    他在登陆的时候有个隐藏的随机算法什么的,直接提交(POST)URL不可以,高手帮忙啊~
      

  3.   

    問題還沒解決嗎???
     你可禁止Cookie, 但好多都是基于Cookie的, 只能新進入時, 清空Cookie
      

  4.   

    是在IE里设置禁止cookie吗?
    我去试试看~
      

  5.   

    哎,我研究了2天终于知道了,其实用线程来写就可以了,调用完释放线程,webbrowser所用的内存和数据全部释放了~