これは可能ではないと思われるので、問題を見るためにはまったく新しい方法が必要です。Java - ファイルから読み取るときにユーザー名とパスワードをループで動的に挿入する
私のJavaプログラムはWebフォームに接続してログインします。コードの別の部分にユーザー名とパスワードがあります。 HTMLフォームには明らかに異なる入力タイプが含まれます。ユーザーとサイトによっては、各フィールドの名前が異なる場合があります。ここではサンプルWebフォームです:このフォームで
<FORM METHOD=POST ACTION="/my.form">
Username:
<INPUT NAME="username">
<BR>
Password
<INPUT TYPE="PASSWORD" NAME="password">
<INPUT TYPE="HIDDEN" NAME="my-hidden-name" VALUE="someValue">
<BR><INPUT TYPE="SUBMIT" VALUE="Login">
</FORM>
、NAME
フィールドは何もすることができますし、サイトにフォームサイトを変更します。私は、例えば、フィールドを格納PROPERTIES
ファイルを必要とすることによって、これを回避得ている:
username
password
my-hidden-name=someValue
SUBMIT=Login
これは、上記のフィールドの半分のために働きます。問題はusername
とpassword
フィールドです。
私はすでにユーザー名とパスワードを持っていますので、私はちょうど:if(currentField=="password") string=mypass123
です。誰かがユーザ名/パスワードのフィールドがuser1
またはpasswordField
と書かれている場合や、基本的には私がif()
に入れたもの以外のものを作成した場合はどうなりますか?
だから誰も名前の任意の組み合わせを扱う方法を提案できますが、それでもユーザー名とパスワードのフィールドはどれですか?現在のコードは次のとおりです。
//Read file logic here
Properties formProps=getDataFromResource(pathToFormFieldsPropfile);
if(null!=formProps)
{
//Gets a list of all the field names, eg "username", "password", "submit"
Enumeration<?> formFields=formProps.keys();
while(formFields.hasMoreElements())
{
String tempString=(String) formFields.nextElement(); //This gets the field name
query+=tempString //Will contain field name
+"=" //Used as a divider in the querystring, ie field=value
+formProps.get(tempString) //Value corresponding to field
//+ URLEncoder.encode((String) formProps.get(tempString),Charset.defaultCharset().toString()) //The value needs to be encoded for POST
+"&"; //The trailing one of these will have to be removed at the end
}
}
ありがとうございます!
申し訳ありませんが、「id要素」は何ですか? – eoinzy
命名規則に関しては、サイトはすでに作成されているので、フィールド名はすでに存在しています。最悪の場合は、ユーザ名にPROPERTIESファイルのユーザ名をアンダースコアまたは前に付けるようにしてから、処理を行い、最後にプリペンドされたものをトリムすることができます。私が選択したどんなパターンでもフィールドが既に始まっているウェブサイトが存在すれば問題はあります。 – eoinzy