2012-08-11 36 views

Trả lời

50

Để chỉ hiển thị một phần của trang bạn cần đặt thuộc tính clipRect cho trang và sau đó hiển thị nó.

var clipRect = document.querySelector(selector).getBoundingClientRect(); 
page.clipRect = { 
    top: clipRect.top, 
    left: clipRect.left, 
    width: clipRect.width, 
    height: clipRect.height 
}; 
page.render('capture.png'); 

Tôi không hiểu phần thứ hai của câu hỏi của bạn. Phantom.js không có nghĩa là không có hiển thị thực tế mà người dùng đang xem.

+0

Tôi hiểu rằng phantom.js là không đầu. Điều tôi cần đặc biệt là khả năng chụp trang web từ những gì hiển thị trong chế độ xem trình duyệt. Bạn có biết cách để làm điều này không? –

+0

Được rồi, tôi hiểu ý của bạn là gì. Tôi không biết chắc liệu PhantomJS có hoạt động theo cách đó hay không. Tôi không biết nếu Phantom có ​​bất kỳ khái niệm nào về chế độ xem hoặc bất kỳ thứ gì như thế. – jasonlfunk

+1

Tôi hiểu. Tôi đang tìm một số loại khung công tác thực hiện chức năng này hoặc một số chức năng bên trong API tiện ích mở rộng của Chrome cho phép tôi thực hiện việc này. Nếu bạn có bất kỳ con trỏ, tôi rất nhiều sẽ đánh giá cao nó. –

-5

Tôi có nhu cầu tương tự, tôi đã cố gắng này và nó đã làm việc tốt cho tôi:

đừng quên các http://www trong URL

var page = require('webpage').create(); 
page.open('YourPageURL', function (status) { 

if (status !== 'success') { 
    console.log('Network Problem'); 
} else { 
    var p = page.evaluate(function() { 
     return document.getElementById('yourDivID').innerHTML 
    }); 
    console.log(p); 
} 
phantom.exit(); 
}); 
+2

Đã bỏ phiếu vì không thực sự lưu ảnh chụp màn hình của "các phần tử HTML riêng lẻ vào PNG" như đã nêu trong câu hỏi. Nó chỉ in HTML bên trong của một số phần tử để điều khiển. –

5

Bạn có thể sử dụng CasperJS, một dự án khác dựa trên PhantomJS.

casper.start('http://www.weather.com/', function() { 
    this.captureSelector('weather.png', '#wx-main'); 
}); 

casper.run(); 
21

Ví dụ làm việc.

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

page.open('http://google.com', function() { 
    // being the actual size of the headless browser 
    page.viewportSize = { width: 1440, height: 900 }; 

    var clipRect = page.evaluate(function(){ 
    return document.querySelector('#hplogo').getBoundingClientRect(); 
    }); 

    page.clipRect = { 
    top: clipRect.top, 
    left: clipRect.left, 
    width: clipRect.width, 
    height: clipRect.height 
    }; 

    page.render('google.png'); 
    phantom.exit(); 
}); 
0

Giải pháp dưới đây phù hợp với tôi.

var clipRect = document.querySelector(selector).getBoundingClientRect(); 
    page.clipRect = { 
       top: clipRect.top, 
       left: clipRect.left, 
       width: clipRect.width, 
       height: clipRect.height 
     }; 
    page.render('capture.png'); 

Nhưng tôi nhận thấy điều này chỉ hoạt động nếu chúng tôi hiển thị hình ảnh không phải là pdf. Để wokaround này cho pdf, hãy thử này

page.evaluate(function (element){ 
    $(element).appendTo('body'); 
    $('body > :not(' + element + ')').hide(); 
    }, element);  
    }); 

window.setTimeout(function(){ 
    page.render("page.pdf"); 
    },1000); 

liên kết này có thể giúp: How to hide all elements except one using jquery?

https://github.com/ariya/phantomjs/issues/10465

Các vấn đề liên quan