2012-11-26 7 views
7

Tôi đang sử dụng cURL để truy cập một số trang khác nhau. Tôi muốn một cách thanh lịch để kiểm tra xem trang có chuyển hướng javascript hay không. Tôi có thể kiểm tra sự hiện diện của một window.location trong cơ thể, nhưng vì nó có thể nằm trong một tệp .js hoặc sử dụng một thư viện như jQuery, có vẻ như mọi giải pháp sẽ không hoàn hảo. Ai có ý tưởng gì không?Phát hiện xem trang web có chuyển hướng javascript không

+0

Không (dễ dàng) có thể với yêu cầu curl đơn giản kể từ khi curl không hỗ trợ javascript. – PeeHaa

+0

Có, tôi đã nghĩ nhiều hơn về việc chạy đánh dấu thông qua một trình phân tích cú pháp, thay vì thực hiện nó. – madphp

+0

Bạn sẽ cần tìm kiếm window.location trong hàm bên ngoài mã và bên trong các hàm được gọi khi tải trang. Thật kỳ lạ, trong tất cả các tập tin bao gồm cũng có. – Ranty

Trả lời

2

Nhờ Ikstar để chỉ ra phantomjs tôi làm việc ra các ví dụ sau:

test.js

var page = require('webpage').create(); 
var testUrls = [ 
    "http://www.google.nl", 
    "http://www.example.com" 
]; 

function testNextUrl() 
{ 
    var testUrl = testUrls.shift(); 
    page.open(testUrl, function() { 
     var hasRedirect = page.url.indexOf(testUrl) !== 0; 
     console.log(testUrl + ": " + hasRedirect.toString()); 
     if (testUrls.length) { 
      testNextUrl(); 
     } else { 
      phantom.exit(); 
     } 
    }); 
} 

testNextUrl(); 

Kết quả:

D:\Tools\phantomjs-1.7.0-windows>phantomjs test.js 
http://www.google.nl: false 
http://www.example.com: true 
+0

Mã của bạn tuân theo các chuyển hướng phía máy khách JS như thế nào? Sẽ không page.open kết thúc trước khi bất kỳ chuyển hướng JS nào sẽ chạy? – CMCDragonkai

0

Bạn không thể làm điều đó bằng cách chỉ phân tích cú pháp tập lệnh. Chỉ thực thi sẽ cho bạn thấy dòng chảy thực sự của JS của trang.

Một cách để bắt chước thực thi là có các cấp độ mã khác nhau có chuyển hướng. Phần lớn nhất sẽ nằm dưới thẻ <script> và mọi chuyển hướng ở đây sẽ là chuyển hướng thẳng. Nếu bất kỳ chuyển hướng nào được tìm thấy bên trong các hàm thì bạn phải theo dõi cấu trúc của chương trình và đoán.

+0

Điều đó phụ thuộc vào những gì @madphp có nghĩa là 'có chuyển hướng javascript' ... Nếu anh ta chỉ muốn phát hiện sự hiện diện của một chuyển hướng, một trình phân tích cú pháp đơn giản giống như tôi đã mô tả trong phần bình luận của câu hỏi. Nếu anh ta muốn biết nếu một người tồn tại và sẽ bị xử tử, anh ta sẽ cần phải đoán những điều đó. – renab

+0

Vâng, đó là một vấn đề. Tôi tự hỏi nếu có một lý do vô hại cho một window.location trong một chức năng. Giống như chuyển hướng đến phiên bản dành cho thiết bị di động hoặc trang không flash. – madphp

+0

@renab. Có và đó là lý do tại sao tôi đã đưa ra cả hai ý kiến ​​ – footy

0

Tùy thuộc vào mục đích sử dụng Curl và thực sự cần chuyển hướng trên trang. Có thể kết hợp khung không đầu như PhantomJS (http://phantomjs.org/) để thực hiện duyệt web cần thiết. Bạn sẽ có thể xem liệu một chuyển hướng có thể xảy ra cũng như theo dõi bất kỳ việc thực thi javascript nào khác trên trang hay không.