phantomjs没有捕获重定向到不同页面的页面的图像

时间:2015-12-14 16:34:27

标签: phantomjs

我正在尝试捕获已重定向的网页(我没有实际网址,我访问了网址,然后将其重定向到真实网址)

例如 这是我正在捕获的URL

http://facebook.com/930559626990858

将用户重定向到

https://www.facebook.com/kalyani.emandi/videos/930559626990858/

Phantomjs没有为这样的链接创建图像

这是我正在使用的代码

var page = require('webpage').create();
page.open('http://facebook.com/930559626990858', function() {
  page.render('facebook.png');
  phantom.exit();
});

如何捕获已重定向的网址

更新

  

重定向..._ script_path =   " WebIDEndpointDispatchController&#34 ;;变种   uri_re = / ^(?:(?:[^:/?#] +):)?(?://(?:[?^ /#] ))?([?^#] )?(?:#()EM>))?)/,TARGET_DOMAIN ='&#39 ;; window.location.href .replace(uri_re,功能(A,b,C,d){风险   E,F,G; E = F = B +(C'&#39 + C:?'&#39);若(d){d = d.replace(/ ^( !|%21)/'&#39); G = d.charAt(0);如果(克==' /' ||克==' \ ')E = d.replace(/ ^ [\ /] + /,' /&#39);}如果(E = F){如果(window._script_path)的document.cookie = " RDIR =&#34 + + window._script_path&#34 ;;   路径= /;   域="(/ ^ (脸谱.. 的)$ / I,&#39。; $ 1和#39); + window.location.hostname.replace window.location的。替换(TARGET_DOMAIN + E);}}); / * = 0){掷   1;}} si_cj(" 3");} catch(e){si_cj(" 1   \ t"); window.document.write(" \ u003Cstyle> body * {display:none   !important;} \ u003C / style> \ u003Ca href = \"#\"   的onclick = \" top.location.href = window.location.href \"   style = \" display:block!important; padding:10px \">转到   Facebook.com \ u003C / A>&#34); / nj4wiNXp /}}}())/ ]]> /window.location.replace(& #34; HTTPS://www.facebook.com/kalyani.emandi/videos/930559626990858/");

这是保存的html中显示的上述脚本(由评论中提到的示例生成)

1 个答案:

答案 0 :(得分:-1)

我运行了一个PhantomJs-as-web-service SaaS,当我通过它运行你的网址时,它可以运行:

http://api.phantomjscloud.com/api/browser/v2/a-demo-key-with-low-quota-per-ip-address/?request={url:%22http://facebook.com/930559626990858%22,renderType:%22html%22,outputAsJson:true}

看看这个输出,pageResponses.events节点。这会告诉您当您的网址是请求时发生了什么。你会看到有页面重定向发生。 PhantomJs因未能正确处理重定向和AJAX“页面完整”而臭名昭着。

解决您的问题,您需要在渲染时添加延迟。 (您所遵循的标准示例不处理AJAX内容)。一个快速而肮脏的黑客将是:

var page = require('webpage').create();
page.open('http://facebook.com/930559626990858', function() {
     setTimeout(function(){
          page.render('facebook.png');
          phantom.exit();
     },2000
});