Tôi đang sử dụng PhantomJS 2 để nhấp vào các thành phần của trang. Tuy nhiên, tôi không biết liệu nhấp chuột vào các yếu tố này có kích hoạt sự kiện hay không (ví dụ: tải trang).PhantomJS 2: Phát hiện nhấp chuột không kích hoạt sự kiện
Tôi muốn để có thể xử lý cả hai trường hợp:
Khi một nhấp chuột vào một yếu tố gây nên một tải trang sau đó tôi muốn đợi cho đến khi trang mới đã được tải.
Khi nhấp chuột không kích hoạt sự kiện, tôi muốn có thể nhận ra điều đó (mà không phải chờ một thời gian chờ lâu).
Trong PhantomJS 1, tôi chỉ đơn giản có thể làm cho việc sử dụng một kết thúc như thế này:
function click(page, elem, callback) {
var loading = false;
page.set('onLoadStarted', function() {
loading = true;
});
page.set('onLoadFinished', function() {
callback('click triggered page load');
});
triggerClick(page, elem);
setTimeout(function() {
if (! loading) {
callback('click did not trigger page load');
}
}, 100);
}
Ở đây tôi đang đóng trên biến loading
đóng vai trò như một "kênh thông tin liên lạc" giữa xử lý sự kiện và chức năng trong setTimeout
.
Trong trường hợp nhấp chuột kích hoạt tải trang, trình xử lý
onLoadFinished
sẽ gọi lại cuộc gọi sau khi trang đã được tải.Trong trường hợp nhấp chuột không kích hoạt tải trang, chức năng trong
setTimeout
sẽ gọi lại cuộc gọi sau chỉ 100ms (có thể chấp nhận được).
Mã này đã làm việc tốt dưới PhantomJS 1.
Dưới PhantomJS 2 không may, các trình xử lý sự kiện cho onLoadStarted
và onLoadFinished
không thể truy cập các biến loading
nữa (tức là họ không làm việc như đóng cửa nữa như nó có vẻ).
Vì vậy, bây giờ tôi tự hỏi làm thế nào tôi có thể đạt được hành vi tương tự trong PhantomJS 2. Bất kỳ ý tưởng?
PS: Tôi biết rằng tôi phải cài đặt các trình xử lý sự kiện thông qua page.property(...)
trong PhantomJS 2 thay vì sử dụng page.set(...)
như trong PhantomJS 1.
Sửa: Tôi đang sử dụng ma gói nút (https://www.npmjs.com/package/phantom) làm cầu nối giữa nút & phantomjs.
Không có 'page.set' trong PhantomJS (1 hoặc 2). Bạn đang sử dụng một số loại cầu nối giữa node.js và PhantomJS? –
Ah, vâng - tôi đang sử dụng gói phantom (https://www.npmjs.com/package/phantom). Rõ ràng là quên đề cập đến điều đó;). Tuy nhiên, tôi đang tự hỏi về cách mà có thể được tham gia vào một giải pháp cho vấn đề của tôi mô tả ở trên ...thực sự là một vấn đề với cầu nút này thay vì với chính các phantomj? – Oliver