我是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;
答案 0 :(得分:1)
不是在循环中使用application.processmessages,为什么不使用OnNavigateComplete事件,然后如果你处于正确的状态,则在该事件中激活你的登录。要设置此项,请在导航到登录之前创建一个新的枚举类型NavigationState = (nsUnknown,nsLoginRequested)
,将navigationstate的实例变量设置为nsLoginRequested。在OnNavigateComplete中,如果状态变量是nsLoginRequested,则处理登录并将状态变量重置为nsUnknown(或您所在州的下一步)。
这是一个简单的状态引擎模式,完全消除了循环。