Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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
使用javascript提交按钮登录网站(使用Java)_Java_Javascript_Authentication - Fatal编程技术网

使用javascript提交按钮登录网站(使用Java)

使用javascript提交按钮登录网站(使用Java),java,javascript,authentication,Java,Javascript,Authentication,通过JAVA,我想登录到一个网站 身份验证:站点有一个javascript按钮,用于执行到主页的重定向。我的webcrawler可以使用Jsoup以编程方式登录到具有html按钮的站点。但是,当我尝试登录到一个带有javascript提交的网站时,我似乎无法以我目前发现的任何方式获得身份验证 到目前为止,我已经尝试: 我尝试使用本机JavaAPI、URLConnection和OutputWriter登录。它用适当的值填充用户和密码字段,但当我尝试执行javascript方法时,它根本不起作用;

通过JAVA,我想登录到一个网站

身份验证:站点有一个javascript按钮,用于执行到主页的重定向。我的webcrawler可以使用Jsoup以编程方式登录到具有html按钮的站点。但是,当我尝试登录到一个带有javascript提交的网站时,我似乎无法以我目前发现的任何方式获得身份验证

到目前为止,我已经尝试:

我尝试使用本机JavaAPI、URLConnection和OutputWriter登录。它用适当的值填充用户和密码字段,但当我尝试执行javascript方法时,它根本不起作用; Jsoup。它可以让我登录到任何包含html按钮的网站。但是,由于它不支持javascript,所以不会有多大帮助; 我试过了。它不仅打印了无数行输出,而且运行时间很长,最终还是失败。 最后,我尝试使用HtmlUnit所基于的Rhino,让它在一长串javascript方法中工作。但不能认证; 我已经试过硒了,但也一无所获。。 我的想法快用完了。。也许我还没有研究其中一个API中包含的所有解决方案,但我仍然无法登录到包含javascript按钮的网站。有人有什么想法吗?

使用。我已经成功地使用它在客户端上对复杂的javascript/ajax过程可靠地重复运行了数百个测试

如果您针对一个特定的网页,您可以自定义脚本并使其非常小

WebDriver驱动程序;//分配到别处 JavascriptExecutor js=JavascriptExecutor驱动程序; //这是javascript,但可以通过Webdriver直接完成 js.executeScriptdocument.getElementById'theform.submit;; 假定已通过使用来处理。您还可以发送命令以单击右键等

使用SeleniumWebDriver,您还可以将标记写入浏览器,以便加载更大的库。请记住,您可能需要等待/睡眠,直到浏览器加载了脚本文件—包括您自己的脚本文件和原始网页用于登录过程的脚本文件。加载和执行所有这些可能需要几秒钟。为避免睡眠时间过长,请使用更可靠的方法注入一个小脚本,该脚本将检查是否已加载所有其他内容检查网页脚本的状态标志、浏览器状态。

使用。我已经成功地使用它在客户端上对复杂的javascript/ajax过程可靠地重复运行了数百个测试

如果您针对一个特定的网页,您可以自定义脚本并使其非常小

WebDriver驱动程序;//分配到别处 JavascriptExecutor js=JavascriptExecutor驱动程序; //这是javascript,但可以通过Webdriver直接完成 js.executeScriptdocument.getElementById'theform.submit;; 假定已通过使用来处理。您还可以发送命令以单击右键等

使用SeleniumWebDriver,您还可以将标记写入浏览器,以便加载更大的库。请记住,您可能需要等待/睡眠,直到浏览器加载了脚本文件—包括您自己的脚本文件和原始网页用于登录过程的脚本文件。加载和执行所有这些可能需要几秒钟。为了避免睡眠时间过长,请使用更可靠的方法注入一个小脚本,该脚本将检查是否已加载所有其他内容检查网页脚本的状态标志、浏览器状态。

我建议:

HtmlUnit是一种用于Java程序的无GUI浏览器。它为HTML建模 文档,并提供允许您调用页面、填充 输出表单、单击链接等。。。就像你平时一样 浏览器

它有相当好的JavaScript支持,并且不断改进 甚至可以使用非常复杂的AJAX库,模拟 Firefox或Internet Explorer取决于您的配置 想用

它通常用于测试目的或检索信息 来自网站

我建议:

HtmlUnit是一种用于Java程序的无GUI浏览器。它为HTML建模 文档,并提供允许您调用页面、填充 输出表单、单击链接等。。。就像你平时一样 浏览器

它有相当好的JavaScript支持,并且不断改进 甚至可以使用非常复杂的AJAX库,模拟 Firefox或Internet Explorer取决于您的配置 想用

它通常用于测试目的或检索信息 来自网站


我遇到了一个听起来很类似的问题,我有一个叫做javascript方法的登录按钮

当我通过web浏览器手动单击登录按钮时,我使用JMeter来观察所传递的信息,但我想您也可以使用WireShark来实现这一点

在我的Java代码中,我 使用正在发送的所有参数创建PostMethod

PostMethod post = new PostMethod(WEB_URL); // URL of the login page
// first is the name of the field on the login page,
// then the value being submitted for that field
post.addParameter(FIELD_USERNAME, "username");
post.addParameter(FIELD_PASSWORD, "password");
然后,我使用HttpClient org.apache.commons.HttpClient.HttpClient执行Post请求

需要注意的一点是,有一些“隐藏”参数正在被传递,而我在手动查看登录页面时没有看到这些参数。当我使用JMeter时,这些都显示给了我


我很乐意澄清任何看起来不清楚的地方。

我有一个问题,听起来很像我有一个叫做javascript方法的登录按钮

当我通过web浏览器手动单击登录按钮时,我使用JMeter来观察所传递的信息,但我想您也可以使用WireShark来实现这一点

在我的Java代码中,我创建了一个包含所有发送参数的PostMethod

PostMethod post = new PostMethod(WEB_URL); // URL of the login page
// first is the name of the field on the login page,
// then the value being submitted for that field
post.addParameter(FIELD_USERNAME, "username");
post.addParameter(FIELD_PASSWORD, "password");
然后,我使用HttpClient org.apache.commons.HttpClient.HttpClient执行Post请求

需要注意的一点是,有一些“隐藏”参数正在被传递,而我在手动查看登录页面时没有看到这些参数。当我使用JMeter时,这些都显示给了我


我很乐意澄清任何似乎不清楚的问题。

试着站在我们的立场上,把问题再读一遍。你说的不多。我对Jsoup、Rhino或Selenium Webdriver一无所知,但是如果你可以在有按钮的情况下提交表单,你可以直接提交表单吗?比如,在Javascript中,而不是document.getElementById'btnSubmit'。单击use document.forms.myForm.submit?我只是想建议一些类似于Travesty3的东西,但是使用Nodejs和Zombie-您是否被锁定在Java中?基本问题是,web站点的实现是由web浏览器来解释的。因此,一般来说,为了能够处理任意web页面的自动操作,您必须模拟实际的web浏览器,并提供页面预期可用的功能。这就是为什么很多像您的项目这样的人使用WebKit作为组件的原因。我不知道如何从Java中实现类似的功能,但是没有流行的现代浏览器是用Java实现的,所以这从一开始就是一个问题。如果所有其他功能都失败了,你可以使用WireShark成功登录,而不成功的则使用各种软件包登录,并根据所学内容对解决方案进行反向工程。听起来犀牛离我们最近,所以我从这里开始。FWIW我同意有人所说的,除了WebKit或其他类似于在循环中使用完整JS实现的浏览器之外,任何东西都将是一个难题。试着站在我们的立场上,再次阅读这个问题。你说的不多。我对Jsoup、Rhino或Selenium Webdriver一无所知,但是如果你可以在有按钮的情况下提交表单,你可以直接提交表单吗?比如,在Javascript中,而不是document.getElementById'btnSubmit'。单击use document.forms.myForm.submit?我只是想建议一些类似于Travesty3的东西,但是使用Nodejs和Zombie-您是否被锁定在Java中?基本问题是,web站点的实现是由web浏览器来解释的。因此,一般来说,为了能够处理任意web页面的自动操作,您必须模拟实际的web浏览器,并提供页面预期可用的功能。这就是为什么很多像您的项目这样的人使用WebKit作为组件的原因。我不知道如何从Java中实现类似的功能,但是没有流行的现代浏览器是用Java实现的,所以这从一开始就是一个问题。如果所有其他功能都失败了,你可以使用WireShark成功登录,而不成功的则使用各种软件包登录,并根据所学内容对解决方案进行反向工程。听起来犀牛离我们最近,所以我从这里开始。FWIW我同意有人所说的,任何缺少WebKit或类似于在循环中使用完整JS实现的浏览器的东西都将是一个难题。@IgorBrusamolinLoboSantos:您使用Selenium Webdriver的浏览器是什么?我在这方面取得了最大的成功,但Chrome、Firefox和IE都有自己的Selenium Webdriver特有的怪癖。@IgorBrusamolinLoboSantos:您使用Selenium Webdriver的浏览器是什么?我在这方面取得了最大的成功,但Chrome、Firefox和IE都有自己的Selenium Webdriver特有的怪癖。