htmlunit的click时间未执行也未报错

yuyisong1992 2015-07-23 03:00:11
java使用htmlunit来做网络爬虫 爬的网页主要是使用ajax来向服务器端发送请求并且将服务器返回结果显示在页面上 现在遇到了一个问题
使用htmlunit的click()方法来模拟用户点击事件 但是在点击后控制台输出asXml显示 并未执行点击操作(如果点击了 会在被点击的tr上新增一个class 但是并没有) 控制台未出现错误信息 并且点击后有让Thread.sleep
请问这是什么问题?怎么解决?
...全文
296 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jo123mn 2016-05-18
  • 打赏
  • 举报
回复
引用 3 楼 yuyisong1992 的回复:
好吧我自己解决了 解决思路如下: 第三个tr点击的时候其实是有反应的 是有向服务器请求数据的 不过不知道为啥htmlunit没有给我做修改页面代码的操作 不过既然有发request 那就会有response 既然有response response里就一定有我要的数据 首先先: MainService.page = subGroup.getValue().click(); //模拟点击 向服务器发送请求 用一个HtmlPage对象接着 WebResponse res = MainService.page.getWebResponse(); //获取最近请求的响应 String html = res.getContentAsString(); //将响应变为字符串 接下来变为字符串之后 就可以做想做的操作了 因为我只是要一个URL地址 所以 接下来我做了切割字符串的操作 得到我要的url int endNum = html.indexOf(subGroup.getValue().asText()); //操作字符串 拿到url String str = html.substring(0, endNum); int beginNum = str.lastIndexOf(URL的特有起始字段); String str2 = html.substring(beginNum, endNum); int buffer = str2.length()-str2.indexOf("\""); String url = html.substring(beginNum, endNum-buffer); 因为网页代码的缘故 我有一些特别的操作 不过上面几行代码就是从response里获得url的过程 这个过程要根据网页的不同具体分析的 接下来只要将得到的url送给getPage方法就能得到正常的页面了 MainService.page = wc.getPage(url); 以上就是解决方案 虽然绕了一个圈子 但还是顺利的解决了 这个方法可以完全的模拟浏览器操作(个人认为 因为服务器端并不知道你的url是怎么来的 服务器端只知道你请求了这个url) 所以若网站有什么防止爬url的机制的话 貌似也能绕过 话说这帖子一直都是我自己在玩 自导自演
我现在也弄htmlunit,模拟一个注册功能,注册需要提交一个包含用户名,邮箱,国家城市等信息的表单,其中邮箱有验证是否已存在ajax请求,我用htmlunit的click方法点击以后,将resultPage用asXml输出,因为点击后应该要跳转到注册成功界面,但是输出的页面并没有跳转,但是我到实际的网站上用模拟的数据登录,是已经注册成功的,能帮忙分析一下吗?
yuyisong1992 2015-07-28
  • 打赏
  • 举报
回复
好吧我自己解决了 解决思路如下: 第三个tr点击的时候其实是有反应的 是有向服务器请求数据的 不过不知道为啥htmlunit没有给我做修改页面代码的操作 不过既然有发request 那就会有response 既然有response response里就一定有我要的数据 首先先: MainService.page = subGroup.getValue().click(); //模拟点击 向服务器发送请求 用一个HtmlPage对象接着 WebResponse res = MainService.page.getWebResponse(); //获取最近请求的响应 String html = res.getContentAsString(); //将响应变为字符串 接下来变为字符串之后 就可以做想做的操作了 因为我只是要一个URL地址 所以 接下来我做了切割字符串的操作 得到我要的url int endNum = html.indexOf(subGroup.getValue().asText()); //操作字符串 拿到url String str = html.substring(0, endNum); int beginNum = str.lastIndexOf(URL的特有起始字段); String str2 = html.substring(beginNum, endNum); int buffer = str2.length()-str2.indexOf("\""); String url = html.substring(beginNum, endNum-buffer); 因为网页代码的缘故 我有一些特别的操作 不过上面几行代码就是从response里获得url的过程 这个过程要根据网页的不同具体分析的 接下来只要将得到的url送给getPage方法就能得到正常的页面了 MainService.page = wc.getPage(url); 以上就是解决方案 虽然绕了一个圈子 但还是顺利的解决了 这个方法可以完全的模拟浏览器操作(个人认为 因为服务器端并不知道你的url是怎么来的 服务器端只知道你请求了这个url) 所以若网站有什么防止爬url的机制的话 貌似也能绕过 话说这帖子一直都是我自己在玩 自导自演
yuyisong1992 2015-07-24
  • 打赏
  • 举报
回复
没有大神来解答吗?
yuyisong1992 2015-07-23
  • 打赏
  • 举报
回复
补充下我的问题 出现这个问题的tr是在第三个table里的 正常浏览器执行顺序是这样的:首先打开页面的同时 第一个table内有随request来的数据 点击第一个table中的tr 会调用ajax向服务器请求第二个table中的内容 同样点击第二个table中的tr会ajax显示第三个table的内容(我的程序到此都能顺利触发click并且调用ajax) 点击第三个table中的tr会清空三个table中的内容 并且让让第一个table重新显示新的内容 就是这一步未模拟点击

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧