Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在Javascript页面中键入内容?_Java_Javascript_Html - Fatal编程技术网

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

如何使用Java在Javascript页面中键入内容?,java,javascript,html,Java,Javascript,Html,如果这个问题已经在其他地方了,我很抱歉,但是我不知道要搜索什么才能找到它 我想要实现的目标是,我想要与使用Java的URL页面上的JavaScript组件进行交互。例如,如果我有文本字段: <input type="text" class = "input_text" name = "notes" maxlength="100" style="width:100px" placeholder = "Extra Notes" /> 如何让Java在文本字段中键入内容

如果这个问题已经在其他地方了,我很抱歉,但是我不知道要搜索什么才能找到它

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

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

如何让Java在文本字段中键入内容

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

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

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

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

所以,让我们不要投反对票,而是解释问题出了什么问题,这样我就可以开始朝着正确的方向看,其他人也可以学习

编辑2:在对所有内容进行了一段时间的探索并学习了一点JavaScript之后,“Post”按钮似乎提交了整个表单。提交时,它会检查以确保表单中的某些字段不是空的


表单以
开头。那个网址到底是什么?(显然,“示例”被替换为实际的网站名称)。当我链接到它时,它表示请求无效。我在其他地方找不到“这里的例子”(实际文本)。我认为URL是发布我需要发布的内容的关键,但我就是不知道如何使用它。这就是我需要的URL吗?

要与动态网页交互,您需要使用支持javascript的框架

HtmlUnit是一款“用于Java程序的无GUI浏览器”。它为HTML建模 文档,并提供允许您调用页面、填充 输出表单、单击链接等。。。就像你在“正常”生活中一样 浏览器


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

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

通过HTTP提交的HTML表单有一个非常标准的表单。查看
标记的
操作
属性以查找要提交到的URL,以及其
标记以查找要提交的参数

下面是一个工作示例,它发布表单,然后将结果页转储到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));
    }
}
import java.io.*;
导入java.net。*;
导入java.util.*;
课堂测试{
公共静态void main(字符串[]args)引发异常{
URL=新URL(“http://example/index.php?.......section=action&do=example-此处“);
Map params=新的HashMap();
参数put(“注释”,“此处有一些愚蠢的文本”);
params.put(“你表格中的其他params”,“废话”);
StringBuilder postData=新建StringBuilder();
对于(Map.Entry参数:params.entrySet()){
如果(postData.length()!=0)postData.append('&');
append(URLEncoder.encode(param.getKey(),“UTF-8”);
postData.append('=');
append(URLEncoder.encode(param.getValue(),“UTF-8”);
}
字节[]postDataBytes=postData.toString().getBytes(“UTF-8”);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod(“POST”);
conn.setRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
conn.setRequestProperty(“内容长度”,String.valueOf(postDataBytes.Length));
连接设置输出(真);
conn.getOutputStream().write(postDataBytes);
Reader in=新的BufferedReader(新的InputStreamReader(conn.getInputStream(),“UTF-8”);
for(int c;(c=in.read())>=0;System.out.print((char)c));
}
}
本例使用问题中的假URL,当然应该将其更改为真实URL。请注意,
&不是URL的一部分;它只是
&
字符的HTML编码


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

好的,谢谢,我会研究一下。我想对我的问题再补充一点,如果你能看看这一点,看看这是否仍然适用,那就太好了。再次感谢。@user3144349您的编辑对我来说不是很清楚,但是您不想直接用htmlunit点击url。您可以一步一步地填写表单并调用submit(或js或Ajax调用),就这样。您可以参考它的文档,因为它符合您的要求。好的,我想现在可以理解了。您使用htmlunit创建表单,然后将其提交到要处理的url?@user3144349好吧,是和否。您不使用htmlunit“创建”表单,您只需创建一个对象,该对象是您的框架定义的html表单句柄。首先,请查看一些示例,@user3144349,你可能想接受这个问题的答案一旦我把这个问题弄清楚了,我会尽我所能把这个问题重新写出来,以便将来的观众更容易理解。我