PhantomJS ouvrir une page après l'autre
J'ai utilisé cet exemple pour créer un phantomjs code pour vous connecter au site web.
var page = require('webpage').create();
page.open("http://www.facebook.com/login.php", function(status) {
if (status === "success") {
page.onConsoleMessage = function(msg, lineNum, sourceId) {
console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")');
};
page.evaluate(function() {
console.log('hello');
document.getElementById("email").value = "email";
document.getElementById("pass").value = "password";
document.getElementById("u_0_1").click();
//page is redirecting.
});
setTimeout(function() {
page.evaluate(function() {
console.log('haha');
});
page.render("page.png");
phantom.exit();
}, 5000);
}
});
À partir de ce lien.
https://gist.github.com/ecin/2473860
Mais je veux ouvrir un autre lien à partir d'un bouton ou d'aller directement sur elle. Comment puis-je le faire?
Ici est un exemple simple. Ne fonctionne pas...
var page = require('webpage').create();
var url = "www.example.com";
page.open(url, function (status) {
setTimeout(function () {
page.evaluate(function () {
console.log('haha');
});
page.render("example.png");
phantom.exit();
}, 5000);
});
var url = "www.google.com";
page.open(url, function (status) {
setTimeout(function () {
page.evaluate(function () {
console.log('haha');
});
page.render("google.png");
phantom.exit();
}, 5000);
});
Notez que PhantomJS est différent de l'environnement d'exécution que le nœud. Il y a des ponts entre un nœud et PhantomJS, mais ils sont écrits de manière légèrement différente.
OriginalL'auteur macroscripts | 2015-06-20
Vous devez vous connecter pour publier un commentaire.
Très proche, maintenant combiner vos deux extraits en un seul.
page.open()
est asynchrone, c'est pourquoi vous devez ouvrir la page suivante seulement après que le premier ait fini:De voir réellement le
console.log()
à l'intérieur depage.evaluate()
vous aurez besoin pour vous inscrire à lade la page.onConsoleMessage
événement. Il y a plus d'autres événements qui sont utile pour le débogage.N'oubliez pas d'ajouter le protocole (http://ou file:///) à l'Url que vous êtes d'ouverture. PhantomJS est un peu pointilleux à ce sujet.
Au lieu d'attendre une statique de la quantité de temps (
setTimeout()
) jusqu'à ce que la page suivante est chargé après vous de faire de l'action. Vous devriez faire usage de lapage.onLoadFinished
événement. C'est plutôt encombrant pour obtenir le droit pour la navigation intensive des scripts. Utilisation CasperJS pour plus de scripts.Souvent
Element.click()
ne fonctionne pas. Cette question a de nombreuses solutions pour ces cas.Google est vraiment un mauvais site pour commencer à expérimenter avec PhantomJS. Mais vous devez utiliser
page.evaluate()
pour modifier la valeur d'un champ de saisie et cliquez sur le bouton de recherche. Vous pouvez également utiliserpage.sendEvent()
de remplir le champ et l'espoir que des résultats instantanés sont activés pour PhantomJS.Je suis en utilisant google comme un exemple. J'ai fais ce code sur le site web. Il dispose de différents domaines. Je dois me connecter à partir de sub1.domain.com et obtenir l'accès à sub2.domain.com . Je veux obtenir quelques données. Le code que vous m'avez donné fonctionne, mais pas entièrement. Il arrive à sub1, mais n'a pas de connexion correctement. Et il va sub2 mais je ne vois pas mon nom d'utilisateur connecté. Je vais coller l'exemple que j'ai utilisé plus tard.
Faire une nouvelle question si vous avez un problème avec ça. Aussi, veuillez vous inscrire à la
resource.error
,page.error
,remote.message
etcasper.page.onResourceTimeout
événements (Exemple). Peut-être il y a des erreurs.J'ai demandé ici: stackoverflow.com/questions/30959899/...
OriginalL'auteur Artjom B.