Requête Ajax dans PhantomJs script
Problème: requête Ajax au sein de phantomJs script d'une page locale ne fonctionne pas (aucune réponse)
Question: Comment puis-je le faire fonctionner? Des idées ou des solutions possibles?
Description: je suis à court d'un phantomJs script et j'ai besoin d'accéder à certaines données qui sont fournies par une fonction php dans une autre page (local). Pour ce faire, j'utilise une requête ajax à cette page à l'intérieur de la phantomjs script. Toutefois, la demande ne fait rien. Le script est:
page.open(url, function (status) {
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {
console.log("Solve Captcha");
$.ajax({
url: 'captcha.php',
data: { filename: 'C:\\wamp\\www\\images\page.open(url, function (status) {
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js', function () {
console.log("Solve Captcha");
$.ajax({
url: 'captcha.php',
data: { filename: 'C:\\wamp\\www\\images\\0.png' },
type: 'post',
success: function (output) {
console.log('Solved');
phantom.exit();
},
});
});
});
.png' },
type: 'post',
success: function (output) {
console.log('Solved');
phantom.exit();
},
});
});
});
La page php dans un local WAMP server et il a été testé avec ajax (en dehors d'un phantomJs script), et il fonctionne très bien. Le script et les fichiers php sont dans le dossier C:\wamp\www
, alors que l'image 0.png
est dans le sous-dossier C:\wamp\www\images
.
Important: La page captcha.php
est dans le localhost, tout en phantomJs est la demande d'une page qui est pas local, qui est, page.open
ouvre une url
qui n'est pas local.
Je ne comprends pas pourquoi faire cette demande dans un phantomJs script ne fonctionne pas. Pourriez-vous m'aider?
OriginalL'auteur Guilherme Salomé | 2015-02-23
Vous devez vous connecter pour publier un commentaire.
page.includeJs()
injecte de jQuery dans la page, de sorte qu'il est seulement accessible à partir du contexte de la page (à l'intérieur depage.evaluate()
). Le contexte de la page est en bac à sable, de sorte que vous ne pouvez pas appelerphantom.exit()
à partir du contexte de la page, car il n'est aucun objetwindow.phantom
.Vous avez deux possibilités pour le faire fonctionner.
Blocage AJAX
jQuery.ajax()
accepte unasync: false
propriété de faire un blocage de l'appel AJAX, de sorte que vous pouvez tout simplement faire un appel et continuer ensuite avec l'exécution itérative style.Attendre l'achèvement
attente
à partir de ces exemples peut être utilisé à attendre pour une condition spécifique à définir. Cette condition doit être défini dans lesuccess
rappel de l'appel AJAX:Le deuxième problème, c'est que vous voulez faire une demande de domaines, car
captcha.php
est sur localhost eturl
est distincte de localhost. Vous devez exécuter PhantomJS avec le--web-security=false
option et utiliser pleinement qualifié Url:http://localhost/captcha.php
.async: false
). Je pense quepage.evaluate
ne pouvez pas accéder àcaptcha.php
ou0.png
.Veuillez vous inscrire à la
onConsoleMessage
,onError
,onResourceError
,onResourceTimeout
les événements. Peut-être il y a des erreurs.Pas d'erreurs, "Résoudre le Captcha" est imprimé sur la console et qu'il y reste. Si je comprend
phantom.exit()
comme dans la solution, puis le code immédiatement après "Résoudre le Captcha" est imprimé. J'ai connecté la sortie de la fonction et je suis unnull
.Peut-être que vous devriez vous inscrire à l'ajax
error
de rappel pour voir si il y avait un problème avec la demande.J'ai donc enlevé le
async
de la propriété et de l'ajout d'une fonction d'erreur et imprimé les messages. J'ai reçuUnable to load resource (#16URL: **url of the page**_/captcha.php_)Error code: 203. Description: Error downloading **url of the page**_/captcha.php_ - server replied: Not Found
. Le url de la page est l'url que j'ai ouvert avecpage.open
et la$.ajax
est d'essayer de chargercaptcha.php
dans l'url, pas dans le serveur LOCAL.OriginalL'auteur Artjom B.