公司项目需要把页面的iframe中的BI报表进行截图,考虑有两种方式:一是使用html2canvas,这个由于页面太多量太大就pass掉了;另外一种方法是使用CutyCapt插件进行截图,这种办法遇到一个不能截取登录过后加载的动态数据的问题,下面是代码。       // 要截图的网页URl     
        $url = "http://localhost:37799/WebReport/tst.html";
        // 设置图片输出地址
        $outdir = 'D:/12_11_images/'.time().'.png';
        if (!file_exists(substr($outdir,0,15))) {
            mkdir($outdir,0777,true);echo '创建文件夹成功';
        }
        // CutyCapt.exe的绝对路径
        $path = 'D:/CutyCapt.exe';       // delay  等待秒   maxwait:不要等待(秒)
        $cmd = "$path url=$url delay=60000  maxwait=90000 out=$outdir";
        // 执行执行命令
        if (exec($cmd) !== false) {
            echo '图片抓取成功!'.'
                     '.'图片保存到路径:'.$outdir.'
                     '.'图片来源URL:'.$url;
        }else{
            echo '系统错误';
        }url得到的网页内容如图:
而截取的图片却是:
因为这个链接是做的单点登录,通过这个url访问他可以直接登录进去的,不需要人工在浏览器先去访问一次。然而上面的代码执行后给我截图出来的就是一张空白图片,里面只有一行“正在加载数据中...”,我想可能页面没有加载完,按照这个插件官方的说法是加delay这个延迟等待参数,设了1分钟没有任何效果,在exec函数前面延迟是没用的,他这个地方相当于直接调起cmd命令执行,执行时才会去访问这个url。有没有用过这个插件的大牛,想请教下这个插件的延迟参数对于这种需要登录的网页都是怎么使用过的,有没有大牛遇到过这种情况,还望能给在下指点一二,在下不胜感激。

解决方案 »

  1.   

    你这个和插件没关系吧http://localhost:37799/WebReport/tst.html 这个路径需要授权才能访问的 所以你get到的永远都是正在加载,
    你需要把这个路径的授权打开 其他用户可以访问 或者吧这个内容保存到本地 然后再去获取内容!
      

  2.   

    显然 CutyCapt 不是截取浏览器输出的画面,而是通过读取页面数据自己生成画面的
    因此你也要给 CutyCapt 赋予登录授权信息(估计很困难)但是,你的服务端应该是能模拟出登录状态的,这样就可转发要截图页面的数据给 CutyCapt 了