PhantomJs cliquer sur les liens ou l'exécution de la page sur les fonctions
Je suis juste à s'habituer à PhantomJs et jusqu'à présent, c'est vraiment cool.
Je suis en train d'analyser un site et d'obtenir des données sur les produits sur le site. Chaque produit chargement de la page avec la couleur par défaut du produit visible. Lorsque vous cliquez sur une nuance de couleur d'intervertir la nouvelle couleur par l'exécution d'une fonction. Chaque cliquable nuance de couleur de l'élément ressemble à ceci:
<input type="image" id="swatch_0" onclick="pPage.getColor(0);" src="http://www.site.com/img50067.jpg">
getColor les mises à jour de la vignette et de prix pour cette couleur. L'id s'incrémente pour chaque couleur disponible (swatch_0, swatch_1, etc) et l'argument passé à getColor incréments. Je veux pour itérer sur chaque couleur avec PhantomJs et tirez les données pertinentes pour chaque.
J'ai chargé la page, chargé de jQuery, et peut extraire les données pour les initally chargés de la couleur, mais rien ne semble me permettre de l'exécuter cliquez sur événements.
ici est ce que j'essaie:
page.evalaute(function){
var selection = $('#confirmText').text(); //name of the color
var price = $('#priceText').text(); //price for that color
console.log('Price is: ' + price);
console.log('Selection is: ' + selection);
console.log($('#swatch_1'));
$('#swatch_1').trigger("click");
selection = $('#selectionConfirmText').text();
price = $('#priceText').text();
console.log('Price is: ' + price);
console.log('Selection is: ' + selection);
}
Cela me donne:
console> Price is: $19.95
console> Selection is: blue
console> [Object Object]
console> TypeError: 'undefined' is not and object //repeating until I manually exit
aucun autre code s'exécute. J'ai aussi essayé le tir de l'événement sans jQuery comme ceci:
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
var cb = document.getElementById("swatch_1");
cb.dispatchEvent(evt);
Et l'exécution de la fonction directement:
pPage.getColor(1);
Et j'obtiens le même résultat. Toute aide est appréciée.
OriginalL'auteur Jeff Ryan | 2012-03-16
Vous devez vous connecter pour publier un commentaire.
Si le
onclick
gestionnaire est spécifié directement dans le HTML comme vous l'avez ici, vous pouvez l'appeler directement avec Javascript:Je crois que vous pouvez également utiliser le PhantomJS
page
méthodesendEvent()
de délivrer un natif cliquez sur l'événement. Mais il semble que c'est un peu compliqué, comme vous appelez cela de la PhantomJS contexte avec la position x,y de la souris. Code non testé:onclick
n'est pas un événement jQuery - c'est une méthode native sur l'élément du DOM (c'est pourquoi mon exemple utilise$(...)[0].onclick
- le[0]
obtient le réel de l'élément DOM, pas un objet jQuery). Cela ne peut pas fonctionner dans de nombreuses circonstances, mais il fonctionne quandonclick
est inclus dans le balisage HTML.BTW - vous pourriez aussi envisager de Sélénium pour ce genre de navigateur de base de grattage. C'est très bon, aussi utilise un vrai navigateur, et a des liaisons pour un tas d'autres langues.
OriginalL'auteur nrabinowitz
pas beaucoup d'activité ici quelques mois, mais j'ai travaillé avec ce genre de choses ces derniers temps et c'est peut-être la réponse à votre question
si jquery est déjà chargé dans le cadre de la page, vous êtes en cours d'exécution, puis l'injection de jquery ne fonctionne pas, vous allez obtenir le comportement que vous décrivez (j'ai rencontré ce trop).
Ainsi, lorsque vous injecter le code jquery, vous devez d'abord assurez-vous que ce n'est pas déjà partie du contexte
OriginalL'auteur Alan Kaiser