2013-02-07 21 views
25

Tôi có một ứng dụng xương sống có một tấn AJAX. (mỗi lần tải trang kết quả trong 5-6 cuộc gọi ajax) vì tôi có nhiều lượt xem và lượt xem nội bộ trong các chế độ xem đó,Phantom.js có thu được tất cả AJAX không?

nếu tôi chạy Phantom.js, tôi có thể nhận được kết quả html cuối cùng không?

Kết quả cuối cùng là những gì người dùng nhìn thấy sau khi tất cả cuộc gọi ajax của tôi chạy.

+5

Tại sao bạn không thử? –

+0

Ý của bạn là gì với 'HTML cuối cùng'? Bạn có nghĩa là một cái gì đó như 'document.body.innerHTML'? – 11684

Trả lời

35

PhamtonJs là một WebKit không đầu với API JavaScript. Khi thu thập dữ liệu một trang, PhatomJs sẽ tải xuống tất cả các yêu cầu phụ thuộc như hình ảnh, js, css ... Nó cũng sẽ thực hiện các cuộc gọi JS và ajax. Tuy nhiên cuộc gọi lại được tải lại được gọi khi trang kết thúc quá trình tải, không phải khi không có yêu cầu đang chờ xử lý. Vì vậy, bạn phải sử dụng một thủ thuật cho việc này.

Có hai cách để giải quyết vấn đề:

  • Chờ cho đến khi "cái gì đó" thay đổi một cách hiệu quả trong bạn trang (một yếu tố). Ví dụ tốt nhất là waitFor.js
  • Đợi vài giây cho đến khi không nhận được yêu cầu nào.
+3

Có mô-đun node.js cho waitFor.js không? Tôi đang sử dụng phamtom.js trong node.js ... – TIMEX

+0

thực sự không biết cho node.js. Nhưng waitFor.js là một ví dụ cơ bản về những gì bạn phải làm. Tôi chắc chắn bạn sẽ có thể sử dụng nó dễ dàng trong trường hợp của bạn. – Cybermaxs

11

Phantom.js có thể chạy javascript trong trang của bạn, vì vậy thao tác này sẽ hoạt động. Có một số article mô tả cách cung cấp cho trình thu thập thông tin các phiên bản tốt đẹp của các trang web javascript bằng cách sử dụng Phantom.js.

Hãy đảm bảo cung cấp cho Phantom.js đủ thời gian để hoàn thành các cuộc gọi ajax, vì đây là thread describes.

1

Bạn có thể sử dụng $ .active cùng với tập lệnh waitFor.js trả về kết nối không hoạt động với máy chủ và chúng tôi cần đợi 0 cho tất cả yêu cầu hoàn thành. Thông tin

thêm: jQuery.active function

0

Nếu bạn có quyền truy cập vào javascript mã của trang web, ngoài waitFor() cách nào, tôi nghĩ bạn có thể đưa ra yêu cầu ajax của bạn đồng bộ. Đôi khi nó đơn giản và chính xác hơn.

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