sto cercando di strisciare le dimensioni di questo prodotto:Come fare clic su un "opzione di selezione" e quindi valutare il contenuto caricato con casperjs
Il problema: I formati sono caricati dopo il colore del il prodotto è selezionato.
Nel codice sorgente della pagina prodotto, vedo che il menu a discesa ha un metodo onchange: fa clic sul modulo #postColor onchange.
La select discesa:
<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>
La forma #postColor, che viene cliccato onchange:
<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;">
Questo è il mio codice finora e non funziona:
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);
}
});
});
Sospetto che il problema è che una pagina completamente nuova viene caricata quando si fa clic su un colore (le dimensioni non vengono aggiunte dinamicamente).
Come risolveresti questo problema?
Questo non funziona per me. Cambia visivamente il menu a discesa dell'opzione (e può essere visto con casper.capture), ma in realtà non attiva il valore selezionato – tfmontague
Perfec t Grazie – CodeGuru