允许我填充包含复选框和单选按钮的HTML表单的替代方法。
我已经设法使用eclipse中的HtmlUnit库将数据发送到html表单并检索页面(我已经发布了下面的Java代码)。
然而,当我将这些代码复制到我的Android项目中时,我发现Android不支持HtmlUnit库。
对于Android来说,HtmlUnit还有其他替代方案吗?另一种方法应该能够将文本、复选框、单选按钮填写到Html表单中,然后单击submit按钮
<form method="post" action="https://www.xxxxx.com/cgi-bin/xxxxxx.cgi">
<p><em>Person:</em>
<input size="18" name="name"><br>
<input type="radio" name="login" value="no" checked="">Name <input type="radio" name="login" value="yes">Username</p>
<p><em>Title:</em>
<input size="18" name="title"></p>
<p><em>Department:</em>
<input size="18" name="department"></p>
<p><em>Groups to Search:</em><br>
<input type="checkbox" name="get_student" value="yes" checked=""> Students<br>
<input type="checkbox" name="get_alum" value="yes" checked=""> Alumni<br>
<input type="checkbox" name="get_staff" value="yes" checked=""> Staff<br>
<input type="checkbox" name="get_faculty" value="yes" checked=""> Faculty</p>
<p><input type="submit" value="Search"></p>
</form>
HtmlUnit Java代码:
public static String submittingForm() throws Exception {
final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_38);
webClient.getOptions().setJavaScriptEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setAjaxController(new NicelyResynchronizingAjaxController());
WebRequest request = new WebRequest(new URL("https://www.xxxxx.com/"));
// Get the first page
HtmlPage page1 = webClient.getPage(request);
System.out.println("PULLING LINKS/ LOADING:");
// Get the form that we are dealing with and within that form,
// find the submit button and the field that we want to change.
List<HtmlForm> listform = page1.getForms();
HtmlForm form = listform.get(0);
HtmlElement Name = page1.getElementByName("name");
Name.click();
Name.type("Adonay");
HtmlElement nameRadio = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='radio' and @value='no']");
HtmlElement userRadio = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='radio' and @value='yes']");
/* userRadio.click(); click when username wanted*/
HtmlElement Title = page1.getElementByName("title");
Title.click();
Title.type("");
HtmlElement Department = page1.getElementByName("department");
Department.click();
Department.type("");
HtmlElement studentBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_student']");
studentBox.click();
//add clicker here
HtmlElement alumniBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_alum']");
alumniBox.click();
//add clicker here
HtmlElement staffBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_staff']");
staffBox.click();
//add clicker here
HtmlElement facultyBox = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='checkbox' and @name='get_faculty']");
facultyBox.click();
//add clicker here
HtmlElement button = page1.getFirstByXPath("/html/body//div[@id='wrapper']//div[@id='layout']//div[@id='container']//div[@id='col1']//div[@id='content']//div[@class='directory-search']//form//input[@type='submit' and @value='Search']");
// Change the value of the text field
// Now submit the form by clicking the button and get back the second page.
HtmlPage page2 = button.click();
webClient.waitForBackgroundJavaScript(200);
return(page2.asXml());
}
伙计们,我找到了另一种方法。因为我知道服务器的地址,所以我尝试使用DataOutputStream
将数据直接发布到它。看看下面的代码:
public String searchDirectory() throws IOException {
URL url = new URL("https://www.xxxxx.com/xxxxx/xxxxx.cgi");
URLConnection con = url.openConnection();
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
DataOutputStream printout = new DataOutputStream (con.getOutputStream ());
String parameters =("name=" + URLEncoder.encode("DATA HERE", "UTF-8"));
printout.writeBytes (parameters);
printout.flush ();
printout.close ();
/*InputStream inputStream = getApplicationContext().getResources().getAssets().open("White Pages Query Results.html");
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "UTF-8");
*/
DataInputStream input = new DataInputStream (con.getInputStream ());
String line;
String htmlCode = "";
while((line = input.readLine()) != null) {
htmlCode += line;
}
return htmlCode;
}
正如您所看到的,我使用Html元素的名称通过Java访问它们。然而,正如您可以从原始帖子中的html表单代码中看到的,单选按钮具有相同的名称,我如何才能单独访问/填充它们而不使用它们的名称??
问题内容: 另一种选择是允许我填写带有复选框和单选按钮的HTML表单。 我正在创建一个需要用户输入的Android应用程序,并将该数据使用html表单发送到网站,然后将其填写,提交表单并返回以下结果页面。 我已经设法在eclipse中使用HtmlUnit库将数据发送到html表单并检索页面(我在下面发布了Java代码)。 但是,当我将该代码复制到我的Android项目中时,我发现Android不支
目前,Android的EditText在处理大量文本行(10000行)时速度非常慢。这种放缓似乎部分是由于EditText支持跨度,主要是由于EditText正在计算每行的宽度,这非常昂贵。EditText有什么更快的替代品,或者优化它以使其可用的方法吗? 编辑:方法跟踪如下:
我想用逗号作为分隔符串联一个ArrayList。我找到了这个答案,说明在Java中使用是可能的。 无法解析方法“join(java.lang.String,java.lang.String,java.lang.String,java.lang.String, Android Studio是否有一个好的、简洁的替代方案(而不是使用for循环)?
问题内容: 我试图在Android中实现算法AES 128,但是它不起作用,问题是 和 是否存在替代方案? 我的方法: 我看到了其他答案,但是无法实现解决方案。 问题答案: 解 我用解决了我的问题 我将android.util.Base64用于Android 不兼容 / 替换
Google Play Store对Android范围内的应用程序存储设置了新的要求,使用清单标志 我的应用程序正在使用React Native community提供的CameraRoll软件包,该软件包尚不支持作用域存储(并且需要标志才能工作),时间非常短(2021年5月5日)。CameraRoll还有其他选择吗?这里的目标是在用户图库应用程序中显示图像,比如谷歌照片或供应商默认图库,而无需在
问题内容: 出于各种原因,在编写 Java应用程序时 ,调用会被皱眉,所以如何通知调用过程并非一切都按计划进行? 编辑: 1是任何非零退出代码的。 问题答案: 当“应用程序”实际上是较大的Java应用程序(服务器)的子应用程序(例如servlet,applet)时,对的使用会被拒绝:在这种情况下,它可能会停止JVM并因此停止所有其他子应用程序。在这种情况下,抛出适当的异常(最好由应用程序框架/服务