Ich versuche, die Größen für dieses Produkt zu kriechen:Wie eine „wählen Sie die Option“ klicken und dann geladenen Inhalt auswerten mit casperjs
Das Problem: Die Größen werden geladen, nachdem die Farbe Das Produkt ist ausgewählt.
Im Quellcode der Produktseite kann ich sehen, dass das Dropdown eine onchange-Methode hat: Es klickt das Formular #postColor onchange.
Die dropdown:
<select name="color" id="color" class="cposelect" onchange="document.getElementById('postColor').click();" style="width:150px;margin-right: 20px; float: left;">
<option selected="selected" onfocus="if (this.storeCurrentControl != null) storeCurrentControl(event, this);" value="0">Select colour</option>
<option onfocus="if (this.storeCurrentControl != null) storeCurrentControl(event, this);" value="-8027">Light Camel</option>
<option onfocus="if (this.storeCurrentControl != null) storeCurrentControl(event, this);" value="-9999">black</option>
</select>
Die #postColor Form, die Onchange geklickt wird:
<input type="submit" name="postColor" value="" onclick="location.href=('./?model=10344-4180&color='+document.forms[0].color.value+'&size='+document.forms[0].size.value+'&addbread=OUTLET&addbread2=DRIZIA&currentimage='+document.getElementById('currentimage').value+'&selectedmi=a1_INDEX_14&prev=10850-4314&next=10413-4183'); return false;" id="postColor" class="cpobutton " style="display: none;">
Das ist mein Code so weit ist und es funktioniert nicht:
casper.start('http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&addbread=OUTLET&addbread2=DRIZIA&color=0¤timage=1&selectedmi=a1_INDEX_14', function() {
this.test.assertExists('select[name="color"] option:nth-child(2)');
this.click('select[name="color"] option:nth-child(2)');
this.waitForSelector('select[name="size"] option:nth-child(2)', function() {
this.test.pass('selector is !');
var sizes = this.evaluate(function() {
console.log("======== evaluating ========");
// var sizes = document.querySelectorAll('#size option');
return document.querySelectorAll('#size option');
});
for (var i = sizes.length - 1; i >= 0; i--) {
console.log(sizes[i].innerText);
}
});
});
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?
Dies funktioniert nicht für mich.Es ändert die Option Dropdown-Liste visuell (und das kann mit casper.capture gesehen werden), aber es löst nicht den ausgewählten Wert. – tfmontague
Perfec t Thankss – CodeGuru