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

标签 java javascript authentication

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

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

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

  • 我尝试使用本地 java api、URLConnection 和 OutputWriter 登录。它用正确的值填充用户和密码字段,但是当我尝试执行 javascript 方法时,它根本不起作用;
  • J汤。 (它可以让我登录到任何包含 html 按钮的网站。但由于它不支持 javascript,因此帮助不大;
  • 我试过 HtmlUnit。不仅打印了无数行,运行时间也很长,最后还是失败。
  • 最后,我尝试使用 Rhino(HtmlUnit 基于它),让它在一长串 javascript 方法中工作。但无法验证;
  • 我已经尝试过 Selenium,但一无所获,还有..

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

最佳答案

使用 Selenium Webdriver , send 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();");

Filling out the form假定已使用 Selenium Webdriver API 处理.您还可以将命令发送到 click()右键等等。

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

关于java - 使用 javascript 提交按钮登录网站(使用 Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10641172/

相关文章:

java - 如果不再引用该对象,那么 "thread of the object"扩展线程会发生什么情况?

java - 在 Java 中解码 base64Url

javascript - 如何给文本区域自动滚动

javascript - jquery 单击最高父输入的子项

c# - 在 Windows 应用程序中存储登录信息

java - 将字符串参数数组存储在列表中 :java

java - Java Android Opencv 2.3 上的凸包

javascript - 单击时调用变量函数

java - 从桌面应用程序登录网站

javax.security.auth.login.LoginException : No LoginModules configured for SomeLogin