2012-09-23 26 views
7

Tôi đang cố điều hướng đến các url được tạo từ chính tập lệnh.Casperjs không thể mở url động?

Mã mẫu này không hoạt động như (tôi đã có) dự kiến. không thể hiểu tại sao :(

var casper = require('casper').create({ 
    viewportSize:{ 
     width:1024, height:768 
    }, 
    pageSettings:{ 
     userAgent:'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11' 
    }, 
    verbose:true 
}); 

casper.on('open', function (location) { 
    console.log(location + ' loaded'); 
}); 

casper.start('http://www.google.com', function() { 
    this.test.assertTitle('Google', 'Google homepage title is the one expected'); 
}); 

casper.mytest = ''; 

casper.then(function() { 
    casper.mytest = 'http://www.yahoo.com'; 
}); 

casper.thenOpen(casper.mytest, function() { 
    this.test.assertTitle('Yahoo', 'Yahoo homepage title is the one expected'); 
}); 

casper.run(function() { 
     casper.exit(); 
    } 
); 

Kết quả là trang thứ hai không tải:

http://www.google.com loaded 
PASS Google homepage title is the one expected 
loaded  
FAIL Yahoo homepage title is the one expected 
# type: assertTitle 
# subject: "" 
# expected: "Yahoo" 

Trả lời

10

Tôi nghĩ rằng, lý do cho vấn đề của bạn là vào lúc này, khi bạn đăng ký thenOpen bước cho Yahoo biến casper.mytest trống. giá trị này được vào bản đồ của CasperJS các bước tại thời điểm này, và nó không quan trọng mà bạn thay đổi biến nguồn ở bước trước.

các bài đăng blog Webscraping with CasperJS and PhantomJS có thể hữu ích một là một ví dụ về tìm nạp url được tạo động.

+1

Cảm ơn bạn! Thật vậy, nếu tôi sử dụng this.open() bên trong thì() {}, nó hoạt động. Mặc dù tôi lo sợ nó có thể dẫn đến mã rất xấu khi dự án của tôi tăng lên: ( – johnjohn

+0

@johnjohn, một thời gian trước đây tôi đã thực hiện một bản vá (không phải là một điều nhỏ) của CasperJS, nó làm cho nó hoạt động theo từng bước (ad-hoc), bạn có thể làm tương tự cho nhu cầu của bạn Vấn đề với phiên bản của tôi là nó đã được một thời gian trước đây, và bây giờ đã lỗi thời, và tôi không có kế hoạch để cổng điều này cho CasperJS mới nhất. – Stan

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