我使用以下代码在网站登录表单的相应字段中填写用户名和密码。
var
Doc: IHTMLDocument2;
I: Integer;
Element: OleVariant;
Elements: IHTMLElementCollection;
Sub: Variant;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Elements := Doc.All;
for I := 0 to Elements.length - 1 do begin
Element := Elements.item(I, varEmpty);
if (UpperCase(Element.tagName) = 'INPUT') and (UpperCase(Element.Type) = 'TEXT') then begin
if (Element.name = 'user') then Element.value := 'theusername';
if (UpperCase(Element.tagName) = 'INPUT') and (UpperCase(Element.Type) = 'PASSWORD') then begin
if (Element.name = 'passwrd') then Element.value := 'thepassword';
end;
end;
Sub := WebBrowser1.Document;
Sub.frmLogin.Submit();
end;
end;
相关领域的信息:
运行代码时发生了什么:
如您所见,用户名部分有效,用户名已插入。但是,密码字段不是。
我做错了什么?
答案 0 :(得分:2)
这很难看出问题中的格式。以下是该代码的副本 - 主观 - 更好的格式。在使用Webbrowser1执行某些操作之前,您可能会注意到end;
。这是end;
的结束if
,因此它们是嵌套的。并且永远不会找到密码字段,因为它与两个条件都不匹配。
虽然代码格式化是一种品味问题,但有些事情确实有助于避免麻烦并使代码更具可读性。
原始重新格式化:
var
Doc: IHTMLDocument2;
I: Integer;
Element: OleVariant;
Elements: IHTMLElementCollection;
Sub: Variant;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Elements := Doc.All;
for I := 0 to Elements.length - 1 do begin
Element := Elements.item(I, varEmpty);
if (UpperCase(Element.tagName) = 'INPUT') and (UpperCase(Element.Type) = 'TEXT') then
begin
if (Element.name = 'user') then Element.value := 'theusername';
if (UpperCase(Element.tagName) = 'INPUT') and (UpperCase(Element.Type) = 'PASSWORD') then
begin
if (Element.name = 'passwrd') then Element.value := 'thepassword';
end;
end;
Sub := WebBrowser1.Document;
Sub.frmLogin.Submit();
end;
end;
解决了逻辑问题:
var
Doc: IHTMLDocument2;
I: Integer;
Element: OleVariant;
Elements: IHTMLElementCollection;
Sub: Variant;
begin
Doc := WebBrowser1.Document as IHTMLDocument2;
Elements := Doc.All;
for I := 0 to Elements.length - 1 do begin
Element := Elements.item(I, varEmpty);
if (UpperCase(Element.tagName) = 'INPUT') and (UpperCase(Element.Type) = 'TEXT') then
begin
if (Element.name = 'user') then
Element.value := 'theusername';
end;
if (UpperCase(Element.tagName) = 'INPUT') and (UpperCase(Element.Type) = 'PASSWORD') then
begin
if (Element.name = 'passwrd') then
Element.value := 'thepassword';
end;
Sub := WebBrowser1.Document;
Sub.frmLogin.Submit();
end;
end;