Tôi đang sử dụng PhantomJS để đăng nhập vào một trang web để làm điều gì đó. Trang web đã sử dụng OAuth để đăng nhập. Nhấp vào nút "Đăng nhập" trên trang, sẽ đưa bạn đến dịch vụ OAuth. Ở đó bạn nhập thông tin đăng nhập của bạn và nhấp vào "Gửi", bạn sẽ được chuyển hướng trở lại trang web gốc. Kịch bản của tôi hoạt động tốt nhưng dựa trên thời gian chờ mà dường như không quá mạnh.Làm cách nào để đợi trang sẵn sàng trong PhantomJS?
Làm cách nào tôi có thể viết lại mã này để thay vì sử dụng setTimeout
, tôi có thể đợi cho đến khi trang sẵn sàng. Tôi thường thấy lỗi rằng trang không sẵn sàng và do đó jQuery không được khởi tạo.
Tôi không quá tốt với Javascript nên một ví dụ sẽ hữu ích. Đây là những gì tôi đã hack với nhau sau một tấn Googling. Đây là mã của tôi:
var page = require('webpage').create();
var system = require('system');
page.settings.resourceTimeout = 10000;
page.onResourceTimeout = function(e) {
console.log("Timed out loading resource " + e.url);
};
page.open('https://mysite.com/login', function(status) {
if (status !== 'success') {
console.log('Error opening url');
phantom.exit(1);
} else {
setTimeout(function() {
console.log('Successfully loaded page');
page.evaluate(function() {
$("#submit-field").click(); //Clicking the login button
});
console.log('Clicked login with OAuth button');
setTimeout(function() {
console.log('Addding the credentials');
page.evaluate(function() {
document.getElementById("username").value = '[email protected]';
document.getElementById("password").value = '[email protected]';
document.getElementById("Login").click();
});
console.log('Clicked login button');
setTimeout(function() {
//Inject some jQuery into the page and invoke that here
console.log('Clicked the export button');
}, 15000);
}, 15000);
});
}
});
Tôi khuyên bạn nên bắt đầu bằng cách di chuyển ra khỏi núi doom – fmsf
Sau khi làm việc với điều này trong vài tuần qua, bây giờ tôi biết ý bạn là gì "núi doom" này. Đó là địa ngục gọi lại. –