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

时间:2012-05-17 18:09:28

标签: java javascript authentication

VIA JAVA,我想登录一个网站。

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

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

  • 我尝试使用URLConnection和OutputWriter使用本机java api登录。它用适当的值填充用户和密码字段,但是当我尝试执行javascript方法时,它根本不起作用;
  • Jsoup。 (它可以登录任何包含html按钮的网站。但由于它不支持javascript,因此无济于事;
  • 我尝试过HtmlUnit。它不仅打印出一系列输出,还需要很长时间才能运行,最终仍然会失败。
  • 最后,我尝试使用Rhino(HtmlUnit所基于的),让它在一长串的javascript方法中工作。但无法进行身份验证;
  • 我已经尝试过Selenium,无处可去,也是..

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

3 个答案:

答案 0 :(得分:3)

使用Selenium Webdriversend javascript commands to the browser。我已经成功地使用它来可靠地重复运行客户端上复杂的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();");
假设{p> Filling out the form已使用Selenium Webdriver API处理。您也可以向click()右键等命令发送命令。

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

答案 1 :(得分:1)

我建议HtmlUnit

  

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

     

它有相当不错的JavaScript支持(不断改进)   并且能够使用非常复杂的AJAX库进行模拟   Firefox或Internet Explorer,具体取决于您的配置   想用。

     

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

答案 2 :(得分:0)

我遇到了类似的问题(我有一个名为javascript方法的登录按钮)。

当我通过网络浏览器手动点击登录按钮时,我使用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时,这些都被揭示了。

我很乐意澄清一些似乎不清楚的事情。