0

次のコードを使用して、Web サイトのログイン フォームのそれぞれのフィールドにユーザー名とパスワードを入力しています。

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;

それぞれのフィールドに関する情報:

ここに画像の説明を入力 ここに画像の説明を入力

コードを実行するとどうなるか:

ここに画像の説明を入力

ご覧のとおり、ユーザー名の部分が機能し、ユーザー名が挿入されます。ただし、パスワード フィールドはそうではありません。

私は何を間違っていますか?

4

1 に答える 1

2

これは、質問のフォーマットでは非常にわかりにくいです。以下は、そのコードのコピーで、主観的にはより良いフォーマットになっています。end;Webbrowser1 で何かを行う前に気付くかもしれません。それはend;あなたifの s の最後の s です。したがって、それらはネストされています。また、両方の条件に一致しないため、パスワード フィールドは決して見つかりません。

コードのフォーマットは好みの問題ですが、問題を回避してコードを読みやすくするのに役立つものもあります。

元の再フォーマット:

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;
于 2017-08-09T16:20:51.540 に答える