2013-03-12 12 views
9

Web sayfalarının ekran görüntülerini almak için PhantomJS kullanıyorum.PhantomJS Sayfa Render Yazı Tipleri

@ font-face ile ilgili sorunlar hakkında başka yayınlar gördüm, ancak sayfalarımdaki yazı tipleri doğru şekilde oluşturuluyor. Tek sorun, ekran görüntüsü aldığım her defasında, yazı tiplerinin önceki ekran görüntüsünden biraz farklı olduğunu gösteriyor. Bu yüzden doğru bir şekilde oluşturulmasına rağmen, ekran görüntüsündeki görünümlerinde tutarsızdırlar.

Çoğu, sayfa hazır olmadan önce ekran görüntüsünün alınmasıyla ilgili bir şey olduğu varsayımına dayanan bir dizi düzeltmeyi denedim, ancak bu sorun görünmüyor. Örneğin, ekran görüntüsünün alınmasını ve oluşturulmasını sağlayan ekran görüntüsünü geciktirdim, ancak bu sorunu çözmüyor.

Çeşitli sayfa olaylarına bağlamayı denedim, ancak yine de şans yok.

Farkı göstermek için ekran görüntüleri ekledim. Sorun şu ki, kullandığım şeyin bağlamında doğru olması için işlenmiş ekran görüntüsüne ihtiyacım var. Bir not olarak screenshot 2

screenshot 1

, ben de CasperJS çalıştık (o yüzden farklı olsun beklemiyordum PhantomJS dayandığını bilerek).

+0

Bu platform hangi işletim sistemidir? –

+0

Eh PhantomJS App Ubuntu 11 üzerinde çalışıyor. Web sitesi farklı bir sunucu üzerinde çalışıyor. – JonB

+1

Muhtemelen kolayca tekrarlanabilir bir test çantasıyla gelmeniz gerekir. –

cevap

0

DOM for font related olaylarını izlemekten mi yoruldunuz? Ayrıca, her X saniyede bir ekran görüntüsü almayı deneyerek, anlık bir anı üretmeye çalışabilirsiniz (bunun çok sayıda boş ve çoğaltılmış resim oluşturacağını unutmayın. Eğer bir sorun varsa, bir min dosya boyutu ayarlamayı veya iki dosya olup olmadığını kontrol etmeyi deneyin. aynı boyuta sahip).

var page = require('webpage').create(); 

page.open("http://www.slashdot.org", function (status) { 
    phantom.exit(); 
}); 

var i = 0; 
setInterval(function() { 

    i += 1; 
    page.render("/tmp/screenshots/screenshot-" + i + ".png"); 

}, 50); 
+0

Üzgünüm, bu çok verimsiz .. Eminim hayalet DOM yüklendiğinde geri arama yapmanıza izin verir (yani yazı tipleri de indirilmiştir) –

0

Aşağıdaki yöntemi kullanarak ekran görüntüsü erteleyebilir: Sayfanız yüklendikten sonra Burada

var page = new WebPage(); 
page.open('http://stackoverflow.com/', function (status) { 
     just_wait(); 
}); 

function just_wait() { 
    setTimeout(function() { 
      page.render('screenshot.png'); 
      phantom.exit(); 
    }, 2000); 
} 

, sizin ekran 2000 ms alınır. Sayfanın tüm kaynakları tamamen yüklemesine izin vermek için gecikmeyi uygun şekilde ayarlayın.