phantomjs
  • webpage-rendering
  • 2013-05-31 4328 views 29 likes 
    29

    Tôi đã thiết lập tập lệnh để tạo webshots của ứng dụng. Nó chạy một cách hoàn hảo và tất cả là tốt Cho đến khi tôi gặp một hình ảnh với một url bị hỏng:phantomJS thời gian chờ trang web

    "<img src='http://testserver.our.intranet/fetch/image/373e8fd2339696e2feeb680b765d626e' />" 
    

    tôi đã quản lý để phá vỡ các kịch bản sau 6 giây bằng cách sử dụng dưới đây, Trước khi nó đã được chỉ lặp mãi mãi.

    Nhưng, là nó có thể bỏ qua yêu cầu mạng (AKA lấy ảnh ra khỏi DOM) và sau đó tiến hành để tạo ra các ngón tay cái mà không có hình ảnh, (hoặc với một thiếu hình ảnh hình ảnh tiêm!)

    var page = require('webpage').create(), 
        system = require('system'), 
        address, output, size; 
    
    if (system.args.length < 3 || system.args.length > 5) { 
        phantom.exit(1); 
    } else { 
        address = system.args[1]; 
        output = system.args[2]; 
        page.viewportSize = { width: 640, height: 640 }; 
        page.zoomFactor = 0.75; 
        page.clipRect = { top: 10, left: 0, width: 640, height: 490 }; 
        try{ 
         page.open(address, function (status) { 
          if (status !== 'success') { 
           console.log('Unable to load the address!'); 
           phantom.exit(); 
          } else { 
           window.setTimeout(function() { 
            page.render(output); 
            phantom.exit(); 
           }, 200); 
          } 
         });  
        } finally{ 
         setTimeout(function() { 
          console.log("Max execution time " + Math.round(6000) + " seconds exceeded"); 
          phantom.exit(1); 
         }, 6000); 
        } 
    } 
    
    +0

    Đây là một câu hỏi hay. Chúng tôi có một vấn đề tương tự, ngoại trừ đó là một chút khó khăn hơn để giải quyết. Chúng tôi có trang web của khách hàng có javascript tùy chỉnh được viết kém. Dường như nó đang khiến webkit bị treo. Chúng tôi có một loạt các trang web mà chúng tôi muốn thử nghiệm, nhưng nó không hoạt động nếu js tùy chỉnh của khách hàng đang phá vỡ webkit. Các obj hẹn giờ là một giải pháp tốt nhưng tôi tự hỏi nếu có ai có một giải pháp khác. ...? – cliffbarnes

    Trả lời

    60

    PhantomJS 1.9 đã giới thiệu một cài đặt mới, resourceTimeout, kiểm soát thời gian yêu cầu có thể thực hiện trước khi bị hủy. Cùng với đó, có sự kiện onResourceTimeout được kích hoạt nếu/khi yêu cầu hết thời gian chờ.

    Dưới đây là một đoạn mã minh họa tất cả những điều trên:

    var page = require('webpage').create(); 
    page.settings.resourceTimeout = 5000; // 5 seconds 
    page.onResourceTimeout = function(e) { 
        console.log(e.errorCode); // it'll probably be 408 
        console.log(e.errorString); // it'll probably be 'Network timeout on resource' 
        console.log(e.url);   // the url whose request timed out 
        phantom.exit(1); 
    }; 
    
    page.open('http://...', function (status) { 
    ... 
    } 
    

    Đáng tiếc là những tùy chọn được giấy tờ kém ngay bây giờ. Tôi phải đi qua GitHub discussionsPhantomJS source code để tìm chúng.

    +2

    ResourceTimeout có nghĩa vụ chấm dứt quá trình phantomjs đã được gọi ra hay không. Bởi vì đối với tôi, nó không. Quá trình phantomjs chỉ bị treo vô thời hạn. – Donato

    +0

    @ Donato Tôi nghĩ rằng resourceTimeout chỉ tạo ra một số sự kiện, có thể được xử lý trong 'page.onResourceTimeout' – Scadge

    +1

    Ít nhất trong phiên bản 1.9.8 resourceTimeout ngắt quá trình - do đó PDF bị hỏng, nhưng quá trình không treo. Tôi cũng đăng nhập tài nguyên nào gây ra vấn đề bằng cách sử dụng page.onResourceTimeout = function (request) ... – Gerfried

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