Sto usando PhantomJS per accedere a un sito e fare qualcosa. Il sito ha utilizzato OAuth per l'accesso. Facendo clic sul pulsante "Accedi", accedi al servizio OAuth. Lì si inseriscono le credenziali e facendo clic su "Invia", si viene reindirizzati al sito originale. Il mio script funziona bene ma fa affidamento su timeout che non sembrano troppo robusti.Come posso aspettare che la pagina sia pronta in PhantomJS?
Come posso riscrivere il codice in modo che invece di utilizzare setTimeout
, posso aspettare fino a quando la pagina è pronta. Spesso vedo errori che la pagina non è pronta e quindi jQuery non è inizializzato.
Non sono troppo bravo con Javascript, quindi un esempio sarebbe utile. Questo è quello che ho hackerato insieme dopo una tonnellata di Google. Qui è il mio codice:
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);
});
}
});
Ti suggerisco di iniziare allontanandoti dalla montagna di sventura – fmsf
Dopo aver lavorato con questo per le ultime due settimane, ora so cosa intendevi con questa "montagna di sventura". È l'inferno del callback. –