getElementsByNameを使用してログインする方法

解決


south  2005-05-19 19:35:15  No: 121759

始めまして。

web画面をVB上に配置して自動処理を目的としたPG作業をしております。
現在ログイン画面の操作を行っております。
奇数(1,3,5,7…)番目のユーザーはログイン出来ました。
しかし偶数(2,4,6,8…)番目がログインされません。
過去ログを参考にしておりますが、いまいち理解できません。

Q1.「getElementsByName」とは何でしょうか?
Q2.下記コードで何処が不適切なのでしょうか?

どなたかご教授お願い致します。

ここからHTML-----------------------------------------------------
<FORM name="form1" method="POST" action="URL"><INPUT NAME="GXHC_GX_jst" TYPE="HIDDEN" VALUE="90c77177662d6164" ></INPUT><INPUT NAME="GXHC_JSESSIONID" TYPE="HIDDEN" VALUE="8f30c585d924103b" ></INPUT>
  <table border=1 bordercolor=red border="0" cellspacing="1" cellpadding="1" width="610">
    <TR>
      <TD COLSPAN="2">
        <B>ユーザーIDとパスワードを入力して 「ログイン」ボタンを押してください。</B><BR>
        ユーザー登録を未だお済ませでない方は、 <A href="URL">ユーザー登録ページ</A>で承っております。<BR><BR>
                契約結果通知書に記載されている、ユーザーID、パスワードをご確認の上、<B><FONT size="+1">「半角」</FONT></B>にて入力願います。ユーザーID、パスワードがわからない場合、<A href="###" onClick="javascript:pdf_wind('URL')">XXX</A>を・・・。
      </TD>
    </TR>
  </TABLE>
    <BR>
  <table border=1 bordercolor=red border="0" cellspacing="1" cellpadding="1">
    <TR>
      <TD align="right" width="50%">ユーザーID</TD>
      <TD width="50%"><input type="text" name="loginid" size="15" maxlength="12">(半角)</TD>
    </TR>
    <TR>
      <TD align="right">パスワード</TD>
      <TD><input type="password" name="password" size="15" maxlength="12">(半角)</TD>
    </TR>
    <TR>
      <TD></TD>
      <TD ALIGN="left"><INPUT type="image" src="../../etczen/images/XX.gif" border="0" alt="ログイン" width="68" height="21"></TD>
    </TR>
  </TABLE>
</FORM>

ここからコード-----------------------------------------------------
Public Sub login(ByVal no As Integer, ByVal id As String, ByVal pass As String)
    
    '変数定義
    Dim obj1 As Object

    'IDとパスワードをセット
    Me.WebBrowser1.Document.All.loginid.Value = id
    Me.WebBrowser1.Document.All.Password.Value = pass 'Item73

    'formnameをセット
    Set obj1 = Me.WebBrowser1.Document.getElementsByName("form1")
    
    'formnameの処理判断
    If obj1.length > 0 Then
        'サブミット
        obj1(0).submit
    End If
    
End Sub


LESIA  2005-05-19 20:59:23  No: 121760

getElementsByNameを使わなくても

'IDとパスワードをセット
Me.WebBrowser1.Document.form1.loginid.Value = id
Me.WebBrowser1.Document.form1.Password.Value = pass 'Item73
'サブミット
Me.WebBrowser1.Document.form1.submit

で、いいのでは?

> 奇数(1,3,5,7…)番目のユーザーはログイン出来ました。
> しかし偶数(2,4,6,8…)番目がログインされません。
これは、意味がよくわかりません。

ユーザーの'IDとパスワードを配列に入れてて、その偶数番目が
ログインされないということでしょうか?
あと、loginプロシージャの引数noが使われていないようですが・・・。


魔界の仮面弁士  2005-05-19 21:35:27  No: 121761

# それにしても、元のHTML文法が出鱈目……。

> Q1.「getElementsByName」とは何でしょうか?

VB6では、
   Form1.Text1.Text = "aaa"
という表記を、文字列(コントロール名)を使って
   Form1.Controls("Text1").Text = "aaa"
のように書き表す事ができます。

そしてgetElementsByNameも同様です。DHTMLにおいては、
   <input name="loginid">
というコントロールを操作する場合に、この要素を
   document.getElementsByName("loginid")
などととして取得できるようになっているわけです。

ただし getElementsByName は、『Element「s」』と複数形になっている
事からもわかるように、その戻り値は「複数の要素」となります。

ですから、たとえば lengthプロパティを使って
   document.getElementsByName("loginid").length
のようにして、「name="loginid"という属性を持った要素の数」を取得したり、
あるいは、括弧をつけて要素番号を渡す事で、
   document.getElementsByName("loginid")(0).value
と、「最初(0番目)のloginidの内容(value)」を読み書きするなどといった
操作が必要になります。

なお、提示されたコード中にある「document.all.コントロール名」も、
HTMLの内容次第では、これも「複数の要素」を返す可能性がありますので、
注意してください。(一つの要素しか返さない場合もあります)


south  2005-05-19 23:14:22  No: 121762

LESIA様、魔界の仮面弁士様、お忙しい中ご教授ありがとうございます。
何とか問題が解決いたしました。

また1つ勉強になりました。


じゃんぬねっと  URL  2005-05-20 00:18:17  No: 121763

弁さんのご指摘の通り...

________________________________________________________

  HTML4.01 Strict としてチェックしました。
  30個のエラーがありました。このHTMLは -122点です。
  タグが 18種類 41組使われています。

  このHTMLには重要な問題が多く含まれています。
  環境によっては閲覧できない可能性が非常に高いと言えます。
________________________________________________________

直したほうが良いと思います。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加