javascript - 如何单击 "select option"然后使用 casperjs 评估加载的内容

标签 javascript phantomjs html-select casperjs

我正在尝试抓取此产品的尺寸:

Link to product

问题:选择产品颜色后加载尺寸。

在产品页面的源代码中,我可以看到下拉菜单有一个 onchange-method:它单击表单 #postColor onchange。

选择下拉列表:

<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>

点击更改的#postColor 表单:

<input type="submit" name="postColor" value="" onclick="location.href=('./?model=10344-4180&amp;color='+document.forms[0].color.value+'&amp;size='+document.forms[0].size.value+'&amp;addbread=OUTLET&amp;addbread2=DRIZIA&amp;currentimage='+document.getElementById('currentimage').value+'&amp;selectedmi=a1_INDEX_14&amp;prev=10850-4314&amp;next=10413-4183'); return false;" id="postColor" class="cpobutton " style="display: none;">

到目前为止,这是我的代码,但无法正常工作:

casper.start('http://shop.baumundpferdgarten.com/showmodel/?model=10344-4180&addbread=OUTLET&addbread2=DRIZIA&color=0&currentimage=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);
        }
    });
});

我怀疑问题是单击颜色时加载了一个全新的页面(尺寸不是动态附加的)。

你会如何解决这个问题?

最佳答案

我是这样做的

this.evaluate(function() {
    $('#select_element_selector').val('value').change();
});

change()非常重要

我假设您的页面上有 jQuery

关于javascript - 如何单击 "select option"然后使用 casperjs 评估加载的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16332312/

相关文章:

javascript - 如何在 d3.js/dimple.js 中使轴刻度可点击

javascript - map 已经创建时如何设置谷歌地图背景。 map.setOptions() 不起作用

javascript - setTimeout 如何工作?

html - select 元素是否具有 required 属性?

javascript - MVC4 从下拉列表中选择 'other' 时显示描述字段

javascript - 如何找出一个对象是否是javascript中的数组?

javascript - phantomjs - 文本变换旋转扭曲文本旋转

javascript - Headless Chrome ( Puppeteer ) - 如何访问文档 Node 元素?

phantomjs - 无法在Karma中安装phantomJS

html - HTML SELECT 元素是否需要 value 属性?