2015-08-12 39 views
5

Tôi gặp sự cố khi kích hoạt tải chậm khi di chuyển với PhantomJS. Không có câu trả lời nào trước đây (ngay cả những câu trả lời được chấp nhận) đã làm việc cho tôi. Hầu hết là cho các phiên bản PhantomJS cũ.Làm thế nào để di chuyển trong PhantomJS để kích hoạt tải lười biếng?

câu hỏi khác - gần như tương tự hoặc tương tự như tôi không có hoặc có câu trả lời mà không làm việc:

Tất cả đều cố gắng tận dụng window.document.body.scrollTop = document.body.scrollHeight với page.evaluate() hoặc thậm chí nếu họ cố gắng sử dụng đúng page.scrollPosition thì đối với một số con trai họ sử dụng một số giá trị cuộn được mã hóa cứng được thu thập rõ ràng hoặc giới hạn số cuộn của chúng đối với một số thành phần cần có trên trang khi cuộn có sẵn.

+0

Ngay cả khi bạn tự trả lời, câu hỏi vẫn phải là câu hỏi hay. Mô tả vấn đề chính xác là gì và liên kết đến các câu hỏi trước đó không hiệu quả. –

+0

Tất nhiên, cảm ơn vì đã chỉ ra điều đó - tôi nghĩ tôi đã thực hiện nó ngay bây giờ. – Seti

Trả lời

6

PS: trước khi hiển thị trang - vui lòng sử dụng page.scrollPosition = { top: 0, lefT: 0}; hoặc bạn sẽ chỉ thấy dưới cùng của trang được hiển thị.

var vWidth = 1080; 
var vHeight = 1920; 
page.viewportSize = { 
    width: vWidth , 
    height: vHeight 
}; 

//Scroll throu! 
var s = 0; 
var sBase = page.evaluate(function() { return document.body.scrollHeight; }); 
page.scrollPosition = { 
    top: sBase, 
    left: 0 
}; 

function sc() { 
    var sBase2 = page.evaluate(function() { return document.body.scrollHeight; }); 
    if (sBase2 != sBase) { 
     sBase = sBase2; 
    } 
    if (s> sBase) { 
     page.viewportSize = {width: vWidth, height: vHeight}; 
     return; 
    } 
    page.scrollPosition = { 
     top: s, 
     left: 0 
    }; 
    page.viewportSize = {width: vWidth, height: s}; 
    s += Math.min(sBase/20,400); 
    setTimeout(sc, 110); 
} 
sc(); 
  • Đầu tiên chúng tôi đặt s và sBase (cuộn hiện bù đắp, và cuộn tối đa bù đắp).
  • Sau đó, chúng tôi cuộn trang bằng phantom đến cuối.

  • Chúng tôi xác định chức năng cuộn - sẽ cuộn từ 0 xuống dưới (sBase) theo các bước của pageHeight/20 hoặc 400 (giá trị thấp hơn) mỗi 110 ms. ** Chức năng này cũng có thể xử lý cuộn vô hạn - nếu được điều chỉnh một chút. Nhưng tôi cung cấp cho bạn cách sử dụng cơ bản sẽ dừng nếu tải trang quá chậm; P

  • Chúng tôi cũng thay đổi chế độ xem-một số tập lệnh tải chậm vẫn chưa được kích hoạt với cuộn trần.
+1

Bạn có thể muốn đổi tên biến 's' và' sBase' thành mô tả chi tiết hơn, vì chúng tương đối ngắn và không mang theo nhiều thông tin. –

+1

Đã cố gắng điều này (trên twitter) và có hai vấn đề: 1) các yếu tố mới dường như không tải, không chắc chắn nếu phantomjs vô hiệu hóa các cuộc gọi ajax? 2) trang dường như phóng to mọi lần lặp lại vì chiều cao bị giảm, cho đến khi chế độ xem chỉ có chiều cao 116px, tôi nghĩ điều này có liên quan đến vấn đề 1). Bạn có biết tại sao các yếu tố mới không tải không? – PGT

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