PhantomJs klicken auf links oder das ausführen der on-page-Funktionen
Bin ich auch einfach nur verwendet, um PhantomJs und so weit es ist wirklich cool.
Ich versuche zu Crawlen einer Website und erhalten Sie Daten über die Produkte auf der Website. Jeder Produkt-Seite lädt mit der Standard-Farbe des Produktes sichtbar. Wenn Sie klicken Sie auf ein Farbfeld, vertauscht es die neue Farbe aus, durch ausführen einer Funktion. Jedes anklickbare Farbfeld-element sieht wie folgt aus:
<input type="image" id="swatch_0" onclick="pPage.getColor(0);" src="http://www.site.com/img50067.jpg">
getColor aktualisiert die Miniaturansicht und der Preis für die Farbe. Die id-Schritten für jede verfügbare Farbe (swatch_0, swatch_1, etc.) und übergebene argument zu getColor Schritten als gut. Ich will zu Durchlaufen, jede Farbe mit PhantomJs und ziehen Sie die relevanten Daten für jede.
Hab ich geladen die Seite geladen jQuery, und ziehen Sie die Daten für die initial geladen Farbe, aber nichts scheint mir zu erlauben, ausführen, klicken Sie auf Ereignisse.
hier ist, was ich versuche:
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);
}
Gibt mir:
console> Price is: $19.95
console> Selection is: blue
console> [Object Object]
console> TypeError: 'undefined' is not and object //repeating until I manually exit
kein anderer code ausgeführt wird. Ich habe auch versucht, die Entlassung der Veranstaltung ohne jQuery wie diese:
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);
Und die Ausführung der Funktion direkt:
pPage.getColor(1);
Und ich bekomme die gleiche Ausgabe. Jede Hilfe ist willkommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn die
onclick
- handler angegeben ist, direkt in den HTML-Code als Sie es hier haben, können Sie direkt aufrufen mit Javascript:Ich glaube, Sie können auch die PhantomJS
page
MethodesendEvent()
zur Frage eines einheitlichen click-Ereignis. Aber wie es aussieht wird das ein bisschen komplizierter, da müssen Sie rufen Sie diese aus dem PhantomJS Zusammenhang mit der x -, y-position der Maus. Ungetestete code:onclick
ist nicht ein jQuery-event - es ist eine native Methode auf das DOM-element (deswegen mein Beispiel verwendet$(...)[0].onclick
- die[0]
bekommt die aktuelle DOM-element, nicht ein jQuery-Objekt). Das wird nicht funktionieren, in vielen Fällen, aber es funktioniert auch wennonclick
enthalten ist in der HTML-markup.nicht viel Aktivität hier für ein paar Monate, aber ich habe mit diesem Zeug in letzter Zeit, und dies ist vielleicht eine Antwort auf Ihre Frage
wenn jquery bereits geladen ist als Teil der Seite, die du läufst, dann Injektion jquery nicht funktioniert, Sie erhalten das Verhalten, das Sie beschreiben (ich traf dies zu).
So, wenn Sie Spritzen den jquery-code, sollten Sie zunächst sicherstellen, dass es nicht bereits Teil des Kontextes