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

Login to website with javascript submit button (Using Java)

本文关键字:使用 Java 网站 登录 javascript 提交 按钮      更新时间:2023-09-26

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

身份验证:该站点有一个 javascript 按钮,用于执行重定向到主页。我的网络爬虫可以使用Jsoup以编程方式登录到具有html按钮的网站。但是当我尝试登录一个以javascript提交的网站时,我似乎无法以迄今为止发现的任何方式进行身份验证。

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

  • 我尝试使用本机java api,URLConnection和OutputWriter登录。它用正确的值填充用户和密码字段,但是当我尝试执行javascript方法时,它根本不起作用;
  • 啧。(它可以让我登录到任何包含html按钮的网站。但是由于它不支持javascript,所以它不会有太大帮助;
  • 我试过HtmlUnit。它不仅打印了一大行输出,而且需要很长时间才能运行,最后仍然失败。
  • 最后,我尝试使用Rhino(HtmlUnit基于Rhino(,让它在一长串javascript方法中工作。但无法进行身份验证;
  • 我已经尝试过硒,但一无所获,也..

我的想法快用完了..也许我还没有探索这些 API 中包含的所有解决方案,但我仍然无法登录包含 javascript 按钮的网站。有人有什么想法吗?

使用 Selenium Webdriver,将 javascript 命令发送到浏览器。我已经成功地使用它在客户端上对复杂的javascript/ajax过程进行了可靠且重复的数百次测试。

如果以特定网页为目标,则可以自定义脚本并使其非常小。

WebDriver driver; // Assigned elsewhere
JavascriptExecutor js = (JavascriptExecutor) driver;
// This is javascript, but can be done through Webdriver directly
js.executeScript("document.getElementById('theform').submit();");

填写表单假定已使用 Selenium Webdriver API 进行处理。您还可以发送命令以click()右按钮等。

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

我建议使用HtmlUnit:

HtmlUnit是一个"Java程序的无GUI浏览器"。它对网页进行建模 文档并提供允许您调用页面、填充的 API 输出表单、点击链接等...就像你在"正常"中所做的那样 浏览器。

它有相当好的JavaScript支持(正在不断改进( 并且能够使用相当复杂的 AJAX 库,模拟 Firefox 或 Internet Explorer 取决于您的配置 想要使用。

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

我有一个听起来很相似的问题(我有一个调用javascript方法的登录按钮(。

我使用JMeter来观察当我通过Web浏览器手动单击登录按钮时传递的内容(但我想你也可以用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时向我透露的。

我很乐意澄清任何似乎不清楚的事情。