锁定老帖子 主题:HtmlUnit实现的网站登录
精华帖 (0) :: 良好帖 (1) :: 新手帖 (1) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-15
最后修改:2010-04-15
最近坛子里接连出现基于httpclient登录网站的帖子,也凑个热闹,分享一点基于htmlunit的登录经验 //创建浏览器,可以选择IE、FF等等 WebClient client = new WebClient(BrowserVersion.INTERNET_EXPLORER_7); //获取某网站页面 HtmlPage page = client.getPage("http://xxx.com"); //获取某页面元素,可通过id或name,(具体方式很多 --Foxswily) HtmlElement elmt = page.getElementById("someid"); //HtmlElement elmt = page.getElementByName("somename"); //此例以文本框为例,先点击,再输入,完全跟真浏览器行为一致 elmt.click(); elmt.type("somewords"); //获取按钮 HtmlButton loginBtn = (HtmlButton)page.getElementById("btnId"); //点击并获得返回结果 Page resultPage = loginBtn.click(); //结果拿到了,想干啥您随意 log.debug(resultPage.getWebResponse().getContentAsString());
private void executeRefreshIfNeeded() throws IOException { // If this page is not in a frame then a refresh has already happened, // most likely through the JavaScript onload handler, so we don't do a // second refresh. final WebWindow window = getEnclosingWindow(); if (window == null) { return; } final String refreshString = getRefreshStringOrNull(); if (refreshString == null || refreshString.length() == 0) { return; } final double time; final URL url; int index = refreshString.indexOf(";"); final boolean timeOnly = (index == -1); if (timeOnly && refreshString.indexOf(" ") == -1) { // Format: <meta http-equiv='refresh' content='10'> try { time = Double.parseDouble(refreshString); } catch (final NumberFormatException e) { if (LOG.isErrorEnabled()) { LOG.error("Malformed refresh string (no ';' but not a number): " + refreshString, e); } return; } url = getWebResponse().getRequestSettings().getUrl(); } else { if (refreshString.indexOf(";") == -1) { index = refreshString.indexOf(" "); } // Format: <meta http-equiv='refresh' // content='10;url=http://www.blah.com'> try { time = Double.parseDouble(refreshString.substring(0, index).trim()); } catch (final NumberFormatException e) { if (LOG.isErrorEnabled()) { LOG.error("Malformed refresh string (no valid number before ';') " + refreshString, e); } return; } index = refreshString.toLowerCase().indexOf("url=", index); if (index == -1) { if (LOG.isErrorEnabled()) { LOG.error("Malformed refresh string (found ';' but no 'url='): " + refreshString); } return; } final StringBuilder buffer = new StringBuilder(refreshString .substring(index + 4)); if (buffer.toString().trim().length() == 0) { // content='10; URL=' is treated as content='10' url = getWebResponse().getRequestSettings().getUrl(); } else { if (buffer.charAt(0) == '"' || buffer.charAt(0) == 0x27) { buffer.deleteCharAt(0); } if (buffer.charAt(buffer.length() - 1) == '"' || buffer.charAt(buffer.length() - 1) == 0x27) { buffer.deleteCharAt(buffer.length() - 1); } final String urlString = buffer.toString(); try { url = getFullyQualifiedUrl(urlString); } catch (final MalformedURLException e) { if (LOG.isErrorEnabled()) { LOG.error("Malformed URL in refresh string: " + refreshString, e); } throw e; } } } final int timeRounded = (int) time; getWebClient().getRefreshHandler().handleRefresh(this, url, timeRounded); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-04-15
不错~~~有人写 htmlcleaner的 没 呵呵
|
|
返回顶楼 | |
发表时间:2010-04-15
呵呵 在支持下
|
|
返回顶楼 | |
发表时间:2010-04-15
这么好的工具,晕,我找的是HTTPUnit,这个工具叫HTMLUnit,谢谢分享。
|
|
返回顶楼 | |
发表时间:2010-04-16
相比selenium有何优势?
|
|
返回顶楼 | |
发表时间:2010-04-16
最后修改:2010-04-16
caoyangx 写道 相比selenium有何优势?
先说说本帖内容以外的事,敢问阁下自己对这个问题有何领悟? 我来臆测一下提问的初衷吧 case 1. 提问者了解selenium而不了解htmlunit。ok,请先把你知道的selenium的优缺点列在这以便大家对比。 case 2.提问者了解htmlunit而不了解selenium。请恕我先问一句,您google过了么? case 3.都不了解。 不说什么了。 闲话说完了,言归正传 ---------------------------------------------------------------------------- 简单了解了一下selenium,基于web的b/s测试框架,自身就是b/s服务,实现多浏览器验证,常规用法是面向测试人员编写测试case测试用的。支持其他语言通过http调用。 htmlunit本意也是测试用。但个人习惯把它当作是没有view的浏览器,可以完全程序控制。 工具是死的,人是活的,想怎么用就发挥想象力吧。 |
|
返回顶楼 | |
发表时间:2010-04-16
我做的时候遇到一个问题,如何提交一个没有submit按钮的一个form,就是这个form没有提交按钮,我们不能调用它的click方法进行提交,有没有什么好的办法对form直接操作的,我用的也是htmlunit。
|
|
返回顶楼 | |
发表时间:2010-04-16
asialee 写道 我做的时候遇到一个问题,如何提交一个没有submit按钮的一个form,就是这个form没有提交按钮,我们不能调用它的click方法进行提交,有没有什么好的办法对form直接操作的,我用的也是htmlunit。
没有submit按钮总有某个链接调用js提交这个form的地方,找到这个链接不就好了?说白就是人操作怎么点,程序就怎么点 |
|
返回顶楼 | |
发表时间:2010-04-16
最后修改:2010-04-16
我知道,谢谢。
|
|
返回顶楼 | |
发表时间:2010-04-16
验证码怎么办?
|
|
返回顶楼 | |