So klicken Sie auf eine "Option auswählen" und bewerten Sie den geladenen Inhalt mit casperjs

10

Ich versuche, die Größen für dieses Produkt zu crawlen:

Link zu Produkt

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?

    
2083 02.05.2013, 07:10
quelle

9 Antworten

14

So mache ich es

%Vor%

Das change() ist sehr wichtig

Ich gehe davon aus, dass Sie jQuery auf der Seite haben

    
wmarbut 15.05.2013, 16:52
quelle
12

Habe dasselbe Problem hier. Meine Lösung ist:

%Vor%     
Valery Lyatsevich 16.08.2013 13:38
quelle
4

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.

%Vor%

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 ( Ссылка ).

    
tfmontague 01.01.2016 02:21
quelle
1

Dies ist ein einfacher Code, um Kreditkartendaten in casper js einzugeben

casper.evaluate (Funktion (CC, security_code) {

%Vor%     
Ravishankar 01.08.2016 18:29
quelle
0

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,

  • Erstellen Sie ein leeres Objekt mit Farben und Farb-IDs {color: colorId}
  • Wie Sie bereits tun, suchen Sie das Auswahlmenü mit [name = 'color'] und durchlaufen Sie diese Optionen. Schieben Sie alles, was nicht den Wert 0 hat, auf Ihr Objekt
  • schreibe eine neue Funktion, die in die URL http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&color=-9999&size=0&addbread=OUTLET&addbread2=DRIZIA&currentimage=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&currentimage=1&selectedmi=a1_INDEX_14&prev=10850-4314&next=10413-4183'

  • Fügen Sie entweder die Größen zum vorhandenen colors-Objekt hinzu oder erstellen Sie ein neues oder console.log. Die Welt gehört dir!
imjared 03.05.2013 14:51
quelle
0

Ich weiß nicht, ob Sie eine Lösung für Ihr Problem gefunden haben, aber hier ist, wie ich es lösen würde:

%Vor%     
Fabio 17.11.2015 15:32
quelle
0

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.

    
Ruskin 16.06.2016 12:30
quelle
0

Vanille Javascript-Lösung (Trigger onchange-Methode):

%Vor%     
tejesh95 22.07.2017 07:35
quelle
0

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!

    
George Worthington 20.03.2018 04:40
quelle