如何使用Java在Javascript页面中输入内容?

时间:2014-02-08 15:36:40

标签: java javascript html

如果这个问题已经存在,我道歉,但我不知道该搜索什么来找到它。

我想要实现的目标是,我希望与使用Java的URL页面上的JavaScript组件进行交互。例如,如果我有文本字段:

<input type="text" class = "input_text" name = "notes" maxlength="100"
       style="width:100px" placeholder = "Extra Notes" />

如何在文本字段中输入J​​ava类型?

更具体地说,有几个文本字段,然后有两个下拉菜单需要输入数据。然后我需要按一个按钮,将信息发送到服务器。

如果不可能,另一个选项是将信息直接发送到他们的服务器。这实际上是理想的方式,但是如何通过按F12确切地找到发送到服务器的内容?

谢谢,我希望这是有道理的。如果没有,请告诉我需要澄清的内容,我会尽力解释。

编辑:当我发布一些我不太了解的东西时,我从来不明白为什么会收到负面评论。还有其他人会有同样的问题,他们对Chrome开发工具(我认为F12打开的工具)了解不多,并会发现这个问题很有用。我无法找到问题答案的原因就是:人们对这个话题了解很多,并且看到像这样的问题,因为它听起来不合适。

所以,请不要贬低,而是解释问题的错误,这样我才能开始朝着正确的方向前进,其他人也可以学习。

编辑2:在探索了所有内容一段时间后,学习了一些JavaScript,似乎&#34; Post&#34;按钮提交整个表单。在提交时,它会检查以确保表单中的某些字段不是空白。

表单以<form action = "http://example/index.php?.......section=action&amp;do=example-here"...... />开头。究竟是什么URL? (显然&#34;示例&#34;被实际网站名称替换)。当我链接到它时,它表示无效请求。我无法找到&#34;示例 - 这里&#34; (实际文本)在任何其他地方。我认为URL是发布我需要发布的内容的关键,但我无法弄清楚如何使用它。这个URL是我需要的吗?

2 个答案:

答案 0 :(得分:2)

要与动态网页进行互动,您需要使用支持javascript的HtmlUnit等框架。

  

HtmlUnit是“用于Java程序的GUI-Less浏览器”。它模拟HTML   文档并提供一个API,允许您调用页面,填写   表格,点击链接等...就像你在“正常”中做的那样   浏览器。

这种apis很好地理解了填写HTML表单的要求,并且可以动态调用js / ajax组件来与服务器端进行交互。

答案 1 :(得分:0)

这里没有JavaScript。您发布的调用JavaScript的内容是HTML。

通过HTTP提交的HTML表单具有非常标准的形式。查看<form>代码的action属性,找出要提交的网址及其<input>代码,找出要随其提交的参数。

这是一个发布表单的工作示例,然后将结果页面转储到System.out:

import java.io.*;
import java.net.* ;
import java.util.*;

class Test {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://example/index.php?.......section=action&do=example-here");
        Map<String,String> params = new HashMap<>();
        params.put("notes", "some silly text here");
        params.put("other params that are in your form", "blah");

        StringBuilder postData = new StringBuilder();
        for (Map.Entry<String,String> param : params.entrySet()) {
            if (postData.length() != 0) postData.append('&');
            postData.append(URLEncoder.encode(param.getKey(), "UTF-8"));
            postData.append('=');
            postData.append(URLEncoder.encode(param.getValue(), "UTF-8"));
        }
        byte[] postDataBytes = postData.toString().getBytes("UTF-8");

        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        conn.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
        conn.setDoOutput(true);
        conn.getOutputStream().write(postDataBytes);

        Reader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
        for (int c; (c = in.read()) >= 0; System.out.print((char)c));
    }
}

此示例使用您问题中的虚假网址,当然应将其更改为真实网址。请注意,&amp;不是网址的一部分;它只是&字符的HTML编码。

如果真实表单需要登录,或者任何<input>元素随表单页面的每个请求而变化,那么您需要做更多工作来模仿真实表单,在这种情况下@ PopoFibo的答案可能是最简单的方法。