Ich versuche, die Größen für dieses Produkt zu crawlen:
Das Problem: Die Größen werden geladen, nachdem die Farbe des Produkts ausgewählt wurde.
Im Quellcode der Produktseite kann ich sehen, dass das Dropdown-Menü eine onchange-Methode hat: Es klickt auf das Formular #postColor onchange.
Das Dropdown-Menü auswählen:
%Vor%Das #postColor-Formular, auf das geklickt wird, wird geändert:
%Vor%Das ist mein Code bisher und es funktioniert nicht:
%Vor%Ich vermute, dass das Problem darin besteht, dass beim Klicken auf eine Farbe eine völlig neue Seite geladen wird (die Größen werden nicht dynamisch angehängt).
Wie würden Sie dieses Problem lösen?
Die empfohlene jQuery-Lösung funktioniert nicht wirklich für mich.
%Vor% Während der Befehl capture()
die ausgewählte Option visuell anzeigt, löst sie das Ereignis nicht aus. Verwenden Sie dies zum Beispiel mit dem Befehl waitForText()
; Das Programm wird Timeout.
Was für mich funktionierte, war der unten angegebene Code (danke @ArtjomB). Wie füllt man ein Select-Element, das nicht in ein Formular eingebettet ist, mit CasperJS?
%Vor% Ich denke, CasperJS sollte native Unterstützung bieten, um Optionen aus einem Dropdown-Menü auszuwählen, wenn sie nicht von einem Formular getrennt sind ( Ссылка ). Selen bietet die Befehle select
und addSelection
( Ссылка ). Ich habe auch ein ausstehendes Ticket auf der CasperJS GitHub-Seite eingereicht, um dies nativ zu implementieren ( Ссылка ).
Dies ist ein einfacher Code, um Kreditkartendaten in casper js einzugeben
casper.evaluate (Funktion (CC, security_code) {
%Vor%Tricky, aber wenn ich mir die URL anschaue, denke ich, dass Casper damit gut umgehen kann.
Lassen Sie es mich wissen, wenn Sie Hilfe mit dem Code dafür benötigen, aber es dauert ein bisschen länger, um Ihnen ein bisschen Pseudocode zu geben,
http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&color=-9999&size=0&addbread=OUTLET&addbread2=DRIZIA¤timage=1&selectedmi=a1_INDEX_14&prev=10850-4314&next=10413-4183
geht und ersetze die Farb-ID mit color=-9999
. Beispiel:
'http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&color=' + object.colorId + '&size=0&addbread=OUTLET&addbread2=DRIZIA¤timage=1&selectedmi=a1_INDEX_14&prev=10850-4314&next=10413-4183'
Ein leicht hacky Weg, dies zu tun ohne mit jQuery mit eingebauten Casper-Methoden ist:
%Vor%Dies ist in TypeScript, aber Sie können für Vanille JS bearbeiten, wenn Sie müssen. Sie müssen eine rekursive Funktion verwenden, da eine normale for-Schleife in Schwierigkeiten mit dem Warteschlangensystem von Capser gerät.
Die Lösung von tejesh95 funktionierte für mich mit ein paar kleineren Änderungen, # 1 Ich konnte findElementById nicht zum Laufen bringen, also wechselte ich zu 'document.querySelector (' # selectorId '). Ich musste auch "onchange" zu "onclick" ändern. Hier ist der Code innerhalb der Casperjs-Testumgebung:
%Vor%})
Folgen Sie Anmerkung: Ihre Meilenzahl kann auf dem oben genannten variieren, ich fand anderswo inkonsistente Ergebnisse, der Textwert würde aktualisiert, aber das zugrunde liegende Steuerelement würde nicht ausgelöst. Frustrierend!
Tags und Links javascript html-select phantomjs casperjs