delphi TEmbeddedWB组件导航完成
我是delphi和TEmbeddedWB(TWebBrowser的替代品,它在delphi中嵌入了Internet Explorer)的新手,我真的不明白我的源代码哪里有问题 非常简单,但不能正常工作 我的问题是我的delphi源代码EmbeddedWB1.ReadyState ReadyState\u无法工作 没错。存在登录表单 在这个网站上() 如果浏览此页面,则无法正确使用 EmbeddedWB1.ReadyState ReadyState_交互式,因为网页导航太快 因此EmbeddedBB1无法检测到登录表单元素,因此发生了错误 有人能帮我吗?问题是什么?提前谢谢delphi TEmbeddedWB组件导航完成,delphi,Delphi,我是delphi和TEmbeddedWB(TWebBrowser的替代品,它在delphi中嵌入了Internet Explorer)的新手,我真的不明白我的源代码哪里有问题 非常简单,但不能正常工作 我的问题是我的delphi源代码EmbeddedWB1.ReadyState ReadyState\u无法工作 没错。存在登录表单 在这个网站上() 如果浏览此页面,则无法正确使用 EmbeddedWB1.ReadyState ReadyState_交互式,因为网页导航太快 因此EmbeddedB
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;
开始
//WB:=嵌入式WB;
表单:=嵌入的wb1.doc2.forms作为IHTMlementCollection;
格式:=forms.Item(0',)作为IHTMLFormElement;
EmbeddedWB1.Navigate('http://sports.khan.co.kr/htdocs/login/login.html');
而EmbeddedWB1.ReadyState ReadyState_交互式
开始
Application.ProcessMessages;
睡眠(500);
结束;
使用嵌入式wb1do
开始
EmbeddedWB1.OleObject.Document.GetElementByID('uid')。值:='loginid';
EmbeddedWB1.OleObject.Document.GetElementByID('upw')。值:='password';
EmbeddedWB1.OleObject.Document.forms.item(1.submit();
结束;
结束;
与其在循环中使用application.processmessages,为什么不使用OnNavigateComplete事件,然后在该事件中激发您的登录(如果您的状态正确)。要对此进行设置,请创建一个新的枚举类型NavigationState=(nsUnknown,nsLoginRequested)
,然后在导航到登录名之前,将NavigationState的实例变量设置为nsLoginRequested。在OnNavigateComplete中,如果状态变量为nsLoginRequested,则处理登录并将状态变量重置为nsUnknown(或状态的下一步)
这是一个简单的状态引擎模式,完全消除了循环