使用javascript提交按钮登录网站(使用Java)
Login to website with javascript submit button (Using Java)
通过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时向我透露的。
我很乐意澄清任何似乎不清楚的事情。
- 如何使用Java脚本创建提交按钮's的拖放功能
- 使用java脚本更改onClick事件中菜单选项卡的颜色
- 使用Java从javascript链接获取html更改
- AngularJS:如何使用java脚本函数更改跨度的ng-show条件
- 如何使用Java在WebDriver中调用外部JavaScript
- 等待,直到使用Java在selenium网络驱动程序中手动单击登录按钮
- 如何获取文档id's在BaasBox[0.9.2]中使用java脚本
- 如何使用java脚本或jQuery基于相同的特定css属性对元素进行分组
- 使用java脚本关闭ifreame
- /如何使用java脚本在safari浏览器中获取活动的Tab url
- 如何使用java脚本或jquery发送跨域SOAP请求
- 在ajax调用中使用java变量
- 如何使用 Java 脚本从 csv 文件中查找每列的数据类型
- 如何使用Java解码由window.btoa编码的base64图像
- 如何在呈现页面后使用 Java 脚本检测 dom 元素值的值是否有任何变化(例如,任何输入或复选框值更改)
- 在 ActionLink mvc3 Razor 中使用 java 脚本变量
- 使用 java 服务器捕获 ajax 请求
- 如何创建一个“下一步”按钮,使用 Java 脚本和 Twitter Bootstrap 切换选项卡
- 需要使用Java编码/转义HTML字符串,并在JavaScript中解码HTML字符串
- 如何使用Java脚本获取具有相同ID的多个图像的高度和宽度