困饶多日- -! WebBrowser控件的二次提交问题 ◥██████████◣(300)

  • 主题发起人 主题发起人 Ekin
  • 开始时间 开始时间
E

Ekin

Unregistered / Unconfirmed
GUEST, unregistred user!
是这样,我做了一个网页自动提交程序. 首次提交也一切正常. 但是,因为需要循环地 登录--->点按纽---->继续循环 于是就使用了一个Timer控件循环来提交,结果出现一个意外的事: 当首次提交OK后,再次在WebBrowser控件中提交登录网址,出现的却不是登录界面,而是登录后的界面,循环到webbrowser1.Navigate再次登陆时就会抱错. 编译为EXE后,程序的第一次提交是正常的,再次提交也是上面的问题,但关闭EXE重打开后又可以直接提交了. 感觉貌似是这个COOKIES在搞怪,不知道是不是这样 那么请教-----------------有没有办法在不重新启动进程的情况下,能多次提交? 也就是说,可以在不重启进程的情况下,搞定COOKIES? 谢谢~~~~ 部分代码______________________________________________________________________procedure TForm1.Timer1Timer(Sender: TObject);var Nowtime: string; sSql,code:string; doc:ihtmldocument2; input:olevariant; user,pwd:ihtmlinputelement;begin Nowtime:=FormatDateTime('HH:MM',Now); sSql:='SELECT CODE FROM ITM WHERE LEFT(SENDTIME,5)='''+Nowtime+''' '; ADOQuery1.SQL.Text:=sSql; ADOQuery1.Open; if not ADOQuery1.IsEmpty then begin Timer1.Enabled:=False; code:=ADOQuery1.fieldByname('CODE').AsString; webbrowser1.Navigate('http://www.www.com/id='+code+''); while WebBrowser1.ReadyState <> READYSTATE_COMPLETE do Application.ProcessMessages; doc:=webbrowser1.document as ihtmldocument2; user:=(doc.all.item('LoginId',0) as ihtmlinputelement); user.value:=edit1.Text; pwd:=(doc.all.item('password',0) as ihtmlinputelement); pwd.value:=edit2.Text; input:=doc.all.item('submit',0); input.click; Timer1.Enabled:=True; end;end;第一次提交成功,第二次提交的时候已经不是登陆界面了,所以在 user:=(doc.all.item('LoginId',0) as ihtmlinputelement); user.value:=edit1.Text;句的时候USER就成了Nil,赋值就会抱错!! 如何解决啊!!分不是问题,可以在追加... 嘿嘿!!!!
 
gz[:)]~~~~~~~~
 
WebBrowser1 用动态生成,动态销毁看看呢
 
动态生成是一样的效果.
 
你提交过一次以后就已经是登陆状态了啊,再刷新当然会仍然是登陆,这是session控制的进程结束时session才会消失,再次登陆时先查找cookie,然后重新生成session你看看你登陆的界面有没有退出登陆的功能,执行一次退出登陆,再提交
 
每次提交后初始下:WebBrowser1.navigate('about:blank');
 
每次提交后初始下:WebBrowser1.navigate('about:blank');---------------------------------------------- 效果一样hs-kill: 再次登陆时先查找cookie,然后重新生成session 能说的详细一点吗?你看看你登陆的界面有没有退出登陆的功能,执行一次退出登陆,再提交 意思是找到退出按纽执行一次,相当于清除cookie ???
 
有登陆按钮,也必定有退出按钮,你可以先查找"退出"点击后,再访问主页但是更好的办法是,你判断当前页面是不是已登陆页面,如果否则登陆,如是是则执行你要完成的任务如果你不结束本进程,那你WebBrowser1.navigate('about:blank');毫无用处
 
枝上柳绵 如何判断是不是已登陆页面啊?能具体说说么!
 
WebBrowser1.navigate('about:blank');后,要等他执行完,就是complete后,再进行其它操作,WebBrowser1是多线程控件,要可以做两个按钮测试,
 
在一个浏览器进程里 不同页面之间的信息传递用的是session 而不是cookiessession是存到进程的内存空间的cookies是保存为文件的一般只有选择了类似“记住我”“在N时间内自动登陆”之类的选项后,才会用到cookie保证下次打开页面后能自动获得以前的登陆信息一般网站的退出 是清除了session、cookies中的登录信息具体这方面的内容,你可以考虑参考网站开发所以,你的要求,需要通过清除session来实现,最简单的,就是调用网站的退出登录页面
 
有登陆窗口的自然是未登陆,这是肯定的一般已登陆的,肯定没有登陆窗口(如帐号框 /*input 标签*/,密码框)你可以通过这个判断((IHtmlDocument2(wb1.Document).body.all)as IHtmlelemCollection ).tag("input")查看里面有没有名称为"accountInput,pwdInput"之类的
 
EmbeddedWB1.ClearCache;EmbeddedWB1.Navigate(sURL);
 
多人接受答案了。
 
后退
顶部