VIA JAVA,我想登录一个网站。
身份验证:该站点有一个javascript按钮,用于执行重定向到主页。我的webcrawler可以使用Jsoup以编程方式登录到具有html按钮的网站。但是当我尝试使用javascript登录到拥有提交的网站时,我似乎无法通过我迄今发现的任何方式进行身份验证。
到目前为止,我已经尝试过:
我的想法已经用完了......也许我没有探索其中一个API中包含的所有解决方案,但我仍然无法登录到包含javascript按钮的网站。有人有什么想法吗?
答案 0 :(得分:3)
使用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();");
假设{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时,这些都被揭示了。
我很乐意澄清一些似乎不清楚的事情。