怎么抓取js执行后的页面

李XX 发布于 2012/12/05 16:53
阅读 3K+
收藏 0

【DevOps必读】产品经理与程序员之间如何破局?>>>

我想直接抓取新浪微博的搜索结果页面,用的htmlunit。但是抓到的页面是js执行前的,我看htmlunit的功能介绍上说是支持js的,但是我不知道怎么办啊T T  求帮忙求指导

或者不用htmlunit也行,有什么别的方法可以获得js执行后的页面信息么?java的就行……别的语言我不会……

加载中
0
绝对零度
绝对零度
获取到html element, 然后获取它的innerHTML。
0
我土鳖
写个浏览器插件吧,要不然还得想办法模拟js执行环境,这可不是一般的麻烦。
我土鳖
回复 @李XX : 去看看firefox官网和google开发者中心的相关文档吧。技术上讲,用浏览器扩展是可以做到你说的那种效果的。
李XX
李XX
回复 @我土鳖 : 那写浏览器插件的话可以做到“不停的访问页面,执行js获得返回结果并保存”这个效果么?要是可以的话求指点浏览器插件咋写T T 只要能做出来,新学一下语言我也可以的
我土鳖
回复 @李XX : 这么说吧,如果你想获取js执行后的结果,就一定要有一个环境,能提供DOM API的同时还能执行JS代码。结果就是现成的此类环境只有浏览器。 Java是写不了浏览器插件的。
李XX
李XX
浏览器插件?这个要怎么写啊?用java可以不
0
你是我的绝笔
你是我的绝笔
try{
        WebClient webClient = new WebClient(BrowserVersion.FIREFOX_24);
        //设置webClient的相关参数
        webClient.getOptions().setJavaScriptEnabled(true);
        webClient.getOptions().setCssEnabled(false);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        //webClient.getOptions().setTimeout(50000);
        webClient.getOptions().setThrowExceptionOnScriptError(false);
        //模拟浏览器打开一个目标网址
            HtmlPage rootPage= webClient.getPage(url);
            System.out.println("为了获取js执行的数据 线程开始沉睡等待");
            Thread.sleep(3000);//主要是这个线程的等待 因为js加载也是需要时间的
            System.out.println("线程结束沉睡");
            String html = rootPage.asText();
            System.out.println(html);
            }catch(Exception e){
            }
返回顶部
顶部