浏览器客户端智能自动化:如何取得页面中JavaScript运行时动态生成的URL?
2015-06-30 11:14
639 查看
浏览器客户端智能自动化:如何取得页面中JavaScript运行时动态生成的URL?
需求
“页面智能拼接”指的是通过启发式查询DOM树,判断出“下一页”链接,取出其href属性。Chromium的官方插件DOM Distiller完成类似的工作,主要目的就是为了将多页点击流程变成单页的Ajax连续阅读体验。问题是,现在有些网站为了阻止浏览器客户端这么做,将href属性设置为"#"(或javascript:void()),然后在其onclick事件里绑定一个JS handler,动态生成下一页的URL。
这种情况下,如何还能完成客户端自动化地取得下一页的URL呢?
方法1:用JS实现一个JavaScript源代码解释器
如果能够获得onclick handler的JS源代码,则可以实现一个JavaScript源代码解释器,JS解释器实际上早就有人实现过了(需要虚拟一个假的全局window对象、执行上下文、代理DOM树的访问,以及最后截获window.open请求或location赋值语句)。关键问题是,无法获得onclick handler的JS源代码!你只能得到一个JS Function对象。不过Function对象的prototype.ToString好像是可以得到源代码的?(待测试验证)
方法2:设置特定的“期望”数据结构,但网络模块底层拦截这个请求
这个方法则需要在内核里做修改。实现难度可能简单一点:当分析到链接元素的href='#'时,向元素发送一个虚拟的click事件(非真实用户发出的UI交互操作),
同时向网络层net模块IPC发送一个expect数据结构:“请捕获接下来的一个main document网络请求,其referer是当前URL,把这个请求URL发给我”
这里似乎可能发生错误的匹配,请参考信息论/编码论相关理论。
链接元素的click handler将正常执行,同时触发新URL请求,由于之前设置了期望匹配,此URL请求将被捕获
Browser UI主线程收到这个新URL,执行接下来的处理
相关文章推荐
- J2EE基础总结(4)——JSP
- 【js模块化+promise】让弹窗们弹起来
- 基于Js实现的UrlEncode和UrlDecode函数代码
- JavaScript学习记录总结(八)——全选、反选
- JavaScript学习记录总结(五)——servlet将json数据写出去
- js中的History +
- js中history 历史对象的属性介绍
- J2ee之jsp+Servlet配置
- js文件的方法中图片或者文件的相对路径(开发笔记1)
- JavaScript学习11:事件入门
- JSON 分析数据格式
- javaScript注意技巧
- 在js中使用createElement创建HTML对象和元素
- 深入探究使JavaScript动画流畅的一些方法
- jsp页面运行错误的问题解决方式
- 各项技巧总结:css/js/正则等(Editplus版)
- jsp页面乱码问题的解决
- extjs4之动态列的实现
- js 设置cookie
- 在JavaScript中实现命名空间