2011-10-31 47 views
5

Tôi đã sử dụng các phantomj để xóa một số dữ liệu khỏi một trang web. Để tăng tốc độ tải Tôi bị vô hiệu hóa việc thực hiện js trên trang web bằng cách làm này:javascriptĐã khắc phục sự cố trên Phantomjs

page.settings.javascriptEnabled = false; 

nhưng điều này gây ra vấn đề - nó làm cho page.evaluate(somefunc.toString()) trở null không có vấn đề gì các chức năng nên trở lại. Nếu tôi giữ cài đặt js mặc định là true thì page.evaluate() sẽ hoạt động trở lại.

Tôi nên làm việc như thế nào? Cảm ơn

+2

Có câu trả lời nào tốt hơn "Đừng làm điều đó" không? Nếu bạn không bật JS, trang không thể đánh giá hàm JS. (Ngoài ra, bạn có thể chuyển tham chiếu hàm tới 'page.evaluate()' - '.toString()' là không cần thiết.) – nrabinowitz

+0

Tôi phải đồng ý với narbinowitz về điều này. Nếu bạn tắt JS trên một trang, nó chắc chắn sẽ không thể đánh giá JS trong ngữ cảnh của trang. –

+8

Tôi không đồng ý với điều đó, phantomJS được cho là sẽ hoạt động như trình duyệt. Mặc dù, việc tắt javascript trên Chrome, bạn vẫn có quyền truy cập vào bảng điều khiển trong các công cụ nhà phát triển và do đó là đối tượng 'window'. Tôi tin rằng nó nên bắt chước hành vi tương tự, khi vô hiệu hóa javascript có nghĩa là phantomjs chỉ nên vô hiệu hóa các tập lệnh để chạy trong trang, nhưng không ngăn cản nhà phát triển đánh giá các tập lệnh mới. thông qua bảng điều khiển, ở đâu, trên các phantomjs 'evaluation' là cách duy nhất để đi. – zanona

Trả lời

3

Nói chung, đừng làm vậy.

Tuy nhiên, nếu bạn thực sự cần điều đó, bạn có thể bật JavaScript nhưng chặn tải bên ngoài .js tệp. Ví dụ:

page.onResourceRequested = function(requestData, request) { 
    if (requestData['Content-Type'] == 'application/javascript' || requestData['Content-Type'] == 'text/javascript') { 
    console.log('Disabling JavaScript files. Aborting: ' + requestData['url']); 
    request.abort(); 
    } 
}; 
Các vấn đề liên quan