如题
解决方案 »
- form 表单提交 <form action="<c:url value='desktop'/>"
- 两个数据库关联读取数据的问题
- 求高手将C#代码转换为Java代码,关于获取网页信息的代码,一些C#中的类不知道如何对应Java类
- struts2 radio name值得指定问题
- java.lang.NullPointerException错误
- 在jsp页面中有关两个submit的问题(急)
- applet访问本地图片.出现的权限问题, 如何解决??
- 有没有什么简单方法可以生成柱状图形的报表啊?
- 请教,关于CheckBox的问题~~~
- JSP 中怎样调用BEAN
- 正则表达式判断18位身份证
- EXT表格 怎么获取当前点击的单元格?
我最近想做使用脚本引擎模拟浏览器来执行网页中的js代码获得动态的url,也看到了httpParser,不知道它功能这么强大
比如说你用httpClient发请求,爬回来一个页面,那么这个时候你想拿到网页中所有的超链接, 这个时候用httpParser就很容易了阿.! 例子jar包里肯定有!你用ScriptEngineManager调用js,不就可以获得js动态生成的url了吗.? 你上面那句话一说,我还真不太明白你有什么需求了.! java调用js跟你要爬网页关系不大.!
但是比如说你拿到某些超链接, 当点击这个超链接会触发一段js函数的时候,这个时候才会跟ScriptEngineManager挂钩.!
发送一个请求到一个网站, 毕竟会相应一个结果给你是吧.?服务器和你的java程序是通过什么通信的呢.?inputStream和outputStream对吧.?
HttpClient是对url/Socket的封装, 可以直接拿到返回结果, 然后用EntityUtils.toString(entity)可以把你的网页变成字符串形式.! 这个时候你拿到的网页肯定既有js,也有html内容吧.?解析它就好了阿.! 如果发现还有<script>标签,就拿这里面的内容再发请求拿结果.!
不用你说的rhino和corba, 就用你说的htmlParser和HttpClient+ScriptEngineManager就能完成你想要做的事了.!
程序发请求从某些程度上讲是代替不了浏览器的.!比如就像你说的window/document一些浏览器的对象,程序是无法解析的.!
ScriptEngineManager调用js的时候,你的js里面不要有浏览器相关的对象,比如说window,document.
所以一般我们爬回来js都会做一些小小的修改,把与浏览器相关的对象全部用其他方式解决.!
比如说鼠标位置, window.event之类的, 自己模拟下鼠标,每次把这个位置调整下.!
曾经我也为改js花了一些功夫的.!
以前还真没这么搞过.! thank you