delphi TEmbeddedWB组件导航完成

时间:2009-12-19 11:24:36

标签: delphi

我是delphi和TEmbeddedWB的新手(替换为在Delphi中嵌入Internet Explorer的TWebBrowser),我真的不明白我的来源有什么问题。

非常简单,但无法正常工作,

我的问题出在我的delphi源码EmbeddedWB1.ReadyState<> READYSTATE_INTERACTIVE不起作用

正确。有登录表格存在

在此网站(http://sports.khan.co.kr/htdocs/login/login.html

如果浏览此页面,则无法正常使用

EmbeddedWB1.ReadyState<> READYSTATE_INTERACTIVE因为网页导航太快,

因此Embeddedbwb1无法检测到登录表单元素并发生错误。

谁能帮帮我?有什么问题?提前谢谢

      begin
        //WB := EmbeddedWB;
        forms := EmbeddedWB1.doc2.Forms as IHTMLElementCollection;
        theForm := forms.Item(0,'') as IHTMLFormElement;

        EmbeddedWB1.Navigate('http://sports.khan.co.kr/htdocs/login/login.html');
        while EmbeddedWB1.ReadyState <> READYSTATE_INTERACTIVE do
        begin
        Application.ProcessMessages;
          Sleep(500);
        end;
          with EmbeddedWB1 do
          begin
            EmbeddedWB1.OleObject.Document.GetElementByID('uid').Value := 'loginid';
            EmbeddedWB1.OleObject.Document.GetElementByID('upw').Value := 'password';
            EmbeddedWB1.OleObject.Document.forms.item(1).submit();

          end;
      end;

1 个答案:

答案 0 :(得分:1)

不是在循环中使用application.processmessages,为什么不使用OnNavigateComplete事件,然后如果你处于正确的状态,则在该事件中激活你的登录。要设置此项,请在导航到登录之前创建一个新的枚举类型NavigationState = (nsUnknown,nsLoginRequested),将navigationstate的实例变量设置为nsLoginRequested。在OnNavigateComplete中,如果状态变量是nsLoginRequested,则处理登录并将状态变量重置为nsUnknown(或您所在州的下一步)。

这是一个简单的状态引擎模式,完全消除了循环。