2015-02-13 18 views
6

Tôi quen với PhantomJS. Nhưng tôi không thể có được một thứ. Tôi có một trang với một hình thức đơn giản:Làm cách nào để gửi biểu mẫu bằng PhantomJS?

<FORM action="save.php" enctype="multipart/form-data" method="GET" onSubmit="return doSubmit();"> 
    <INPUT name="test_data" type="text"> 
    <INPUT name="Submit" type="submit" value="Submit"> 
</FORM> 

và save.php chỉ viết xuống giá trị test_data

vì vậy tôi đang làm điều này:

page.evaluate(function() { 
    document.forms[0].test_data.value="555"; 
    doSubmit(); 
}); 

Khi hiển thị trang tôi xem trường văn bản đó là 555, nhưng biểu mẫu không được gửi và save.php không ghi giá trị test_data. Vì vậy, doSubmit() không được thực hiện, phải không? doSubmit() là một bước xác nhận đơn giản và gửi một nghĩa vụ phải tải trang tiếp theo.

Vì vậy, câu hỏi đặt ra là: làm cách nào tôi có thể thực thi mã javascript trên trang bằng PhantomJS?

+0

'chức năng doSubmit() { \t \t \t if (document.form [0] .test_data.value == "") \t {\t \t \t cảnh báo ("Điền vào trường!"); \t \t trả về false; \t} \t \t trả về true; } 'Đây là, xin lỗi tôi quên đăng nó trong câu hỏi của tôi. Nó chỉ làm việc xác nhận. – user3416803

+0

Ồ, tôi hiểu rồi. Vì vậy, tôi chỉ cần nhấp vào nút gửi qua JS? Dù sao. Nếu tôi cần phải thực hiện chức năng, nó sẽ hoạt động theo cách này hay có cách tiếp cận khác? Xin lỗi vì bị què. – user3416803

+1

Bản sao có thể có của [Cách gửi biểu mẫu bằng PhantomJS] (http://stackoverflow.com/questions/9246438/how-to-submit-a-form-using-phantomjs) –

Trả lời

9

Dường như bạn muốn gửi biểu mẫu. Bạn có thể đạt được điều đó theo những cách khác nhau, như

Sau đó, bạn sẽ phải đợi cho đến khi trang tiếp theo được tải. Điều này được thực hiện tốt nhất bằng cách đăng ký page.onLoadFinished (sau đó chứa tập lệnh còn lại của bạn) ngay trước khi gửi biểu mẫu.

page.open(url, function(){ 
    page.onLoadFinished = function(){ 
     page.render("nextPage.png"); 
     phantom.exit(); 
    }; 
    page.evaluate(function() { 
     document.forms[0].test_data.value="555"; 
     document.forms[0].submit(); 
    }); 
}); 

hoặc bạn chỉ có thể chờ đợi:

page.open(url, function(){ 
    page.evaluate(function() { 
     document.forms[0].test_data.value="555"; 
     document.forms[0].submit(); 
    }); 
    setTimeout(function(){ 
     page.render("nextPage.png"); 
     phantom.exit(); 
    }, 5000); // 5 seconds 
}); 
+0

Kỳ lạ của nó, nhưng như tôi thấy đơn giản nhất phương thức là document.forms [0] .submit(); nhưng nó không hoạt động. – user3416803

+0

Không, tôi đang sử dụng phiên bản 2.0.0, dường như là phiên bản cuối cùng. Có lẽ vấn đề là ở nơi khác? – user3416803

+0

Vui lòng đăng ký vào ['onConsoleMessage'] (http://phantomjs.org/api/webpage/handler/on-console-message.html), [' onError'] (http://phantomjs.org/api/ trang web/handler/on-error.html), ['onResourceError'] (http://phantomjs.org/api/webpage/handler/on-resource-error.html), [' onResourceTimeout'] (http: // sự kiện phantomjs.org/api/webpage/handler/on-resource-timeout.html). Có thể có lỗi. –

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