如何用phantomjs去抓取js渲染后的页面

1.安装phantomjs

网上有很多。

2.执行官网上的示例代码

// Read the Phantom webpage ‘#intro‘ element text using jQuery and "includeJs"

"use strict";
var page = require(‘webpage‘).create();

page.onConsoleMessage = function(msg) {
    console.log(msg);
};

page.open("http://phantomjs.org/", function(status) {
    if (status === "success") {
        page.includeJs("http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js", function() {
            page.evaluate(function() {
                console.log("$(\".explanation\").text() -> " + $(".explanation").text());
            });
            phantom.exit(0);
        });
    } else {
      phantom.exit(1);
    }
});

  

3.执行状态为一直卡在那里,不报错也不退出

为了查看程序的内部执行状态,加入运行日志

                page.onResourceRequested = function (req) {
                                console.log(‘requested: ‘ + JSON.stringify(req, undefined, 4));
                                    };  

                    page.onResourceReceived = function (res) {
                                    console.log(‘received: ‘ + JSON.stringify(res, undefined, 4));
                                        };

  

4.发现程序一直卡在一个js的请求

http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js

5.在自己的服务器上用python的SimpleHTTPServer 简单搭了一个http的server先FQ把这个js下载下来,放到web上

6.修改代码把includeJS指向自己搭的http server上


备注:

调试过程发现phantomjs还有一个问题,就是page.open是异步执行的,如下代码:

var webPage = require(‘webpage‘);
var page = webPage.create();

page.open(‘http://www.baidu.com/‘, function(status) {
                  console.log(‘Status: ‘ + status);
                    // Do other things here...
                     }); 

phantom.exit(1)

你执行完后,打印返回值,echo $?,会得到1

而你把

phantom.exit(1)

注释之后,会得到status值。

时间: 2024-10-19 05:43:18

如何用phantomjs去抓取js渲染后的页面的相关文章

使用phantomjs抓取JS动态生成的页面

关于phantomjs phantomjs实现了一个无界面的webkit浏览器.虽然没有界面,但dom渲染.js运行.网络访问等API都很完整.可以利用phantomjs来下载js生成的页面. 下载phantomjs(http://phantomjs.org/download.html).解压到任意目录,在Windows下将包含phantomjs.exe的目录添加到系统路径.Linux下 phantomjs2.0还没有提供下载的包,需要手动编译.centos 安装phantomjs步骤如下: 在

Java使用HtmlUnit抓取js渲染页面

需求: 需要采集js渲染的页面,有些网站的页面是js渲染的 实现: 基于HtmlUnit实现: public static void getAjaxPage() throws Exception{ WebClient webClient = new WebClient(); webClient.setJavaScriptEnabled(true); webClient.setCssEnabled(false); webClient.setAjaxController(new NicelyResy

使用selenium抓取JS动态生成的页面

在抓取网页数据时,传统jsoup方案只能对静态页面有效,而有些网页数据往往是js生成的,所以这时候需要其它的方案. 首先的思路是分析js程序,对js的请求进行再次抓取,这适合于特定的页面抓取,要做到对不同目标URL的通用性,比较麻烦. 第二种思路,也是比较成熟的做法是利用第三方的驱动渲染页面,然后下载.这里介绍一下第二种实现思路. Selenium是一个模拟浏览器的自动化测试工具,它提供一组API可以与真实的浏览器内核交互. Java环境下的maven配置如下: <dependency> &l

数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置

数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上不存在完美的.一致的.通用的抓取工具.为了不同的目的,需要定制不同的代码.不过,我们不必Start from Scratch,已经有许多的基本工具.基本方法和基础框架可供使用.不同的工具.不同的方法.不同的框架的特点也不同.了解这些工具.方法和框架是首要任务,接下来就需要明白它们的差异都在哪里.什么情境该用什

Google去抓取同一文件的流量就超过了700Mbps。DDOS爬虫攻击

只需要使用一台笔记本,打开几个web标签页,仅仅拷贝一些指向10MB文件的链接,Google去抓取同一文件的流量就超过了700Mbps. Google的FeedFetcher爬虫会将spreadsheet的=image("link")中的任意链接缓存. 如果我们将=image("http://example.com/image.jpg")输入到任意一个Google spreadsheet中,Google就会"派出"FeedFetcher爬虫去抓取

网页调试技巧:抓取马上跳转的页面POST信息或者页面内容

http://www.qs5.org/Post/625.html 网页调试技巧:抓取马上跳转的页面POST信息或者页面内容 2016/02/02 | 心得分享 | 0 Replies 有时候调试网页或者抓别人网页的POST包的时候. 总会遇到这样的尴尬,我们需要抓取POST提交的信息. 或者获取POST完成页面返回的代码. 但是,目标页却马上就跳转了,导致,还没来得及Esc呢,页面就已经刷新了. 这种情况,起码谷歌浏览器的F12是搞不了了... 比如下面的情况 我把密码放在 被Post页面的源码

抓取js动态生成数据

最近在抓数据,一般的网页数据抓取相对容易一些,今天在抓电视猫的节目单,发现有些数据时抓取不到的,Java端得到的HTML文件里面没有某一段代码,查了很多资料,发现说是js动态生成的数据,无法直接抓取,有一种解决方法是利用找到ajax请求地址和参数,重新抓取,该方法存在一个问题,就是当参数被加密过时,该方法就不好用了,所以,这里用了一个办法,就是利用HTMLunit来抓取(可以利用jsuop来处理HTML文件),jar包下载地址:http://download.csdn.net/detail/jo

实例:使用puppeteer headless方式抓取JS网页

puppeteer google chrome团队出品的puppeteer 是依赖nodejs和chromium的自动化测试库,它的最大优点就是可以处理网页中的动态内容,如JavaScript,能够更好的模拟用户. 有些网站的反爬虫手段是将部分内容隐藏于某些javascript/ajax请求中,致使直接获取a标签的方式不奏效.甚至有些网站会设置隐藏元素"陷阱",对用户不可见,脚本触发则认为是机器.这种情况下,puppeteer的优势就凸显出来了. 它可实现如下功能: 生成页面的屏幕截图

java使用htmlunit工具抓取js中加载的数据

htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度也是非常迅速的.采用的是Rhinojs引擎.模拟js运行. 说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,正因为其没有界面,因此执行的速度还是可以滴,HtmlUnit提供了一系列的API,这些API可以干的功能比较多,如表单的填充,表单的提交,模仿点击链接,由于内置了Rhinojs