【问题标题】:delphi TEmbeddedWB component navigation completiondelphi TEmbeddedWB 组件导航完成
【发布时间】:2009-12-19 11:24:36
【问题描述】:

我是 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;

【问题讨论】:

    标签: delphi


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-22
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多