我不认为这是可能的,所以也许我需要一种全新的方式来研究这个问题。
我的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
}
}
谢谢!
答案 0 :(得分:0)
也许您可以使用 id 元素来检测哪些字段用于用户名和密码。
否则听起来您可能需要要求用户名和密码字段遵循某些命名约定。
也许他们总是可以从__username和__password(或类似的东西)开始。
答案 1 :(得分:0)
为了跟进这一点,我设法找到了解决这个问题的方法,但它可能并不理想。
基本上,我这样做是为了让用户必须拥有用户名和密码作为PROPERTIES文件中的第一个和第二个空白条目。
然后在我的代码中,我有一个计数器,表示if ((counter++)==0), insert username
然后是if ((counter++)==1), insert password
,然后是else leave it blank
。
这适用于我需要做的事情,但可能并不理想。
PS,我实现了一个自定义Property类,以确保它们全部被排序,因为默认方法将它们存储在无序列表中。