访问和填充div元素的特定出现

时间:2017-08-10 08:47:54

标签: javascript phantomjs

这是网页的html部分

<div id="upload" class="panel">
        <div style="width:720px" align="left">
            <table border="0"><tr>
                <td>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                </td>
                <td>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                </td>
                <td>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                    <div><input name="attachment[]" type="file"></div>
                </td>
            </tr></table>
</div>

我填充文件类型输入,如

page.uploadFile('input[type=file]', 'test2.png');

这总是填充第一个div输入附件文件类型。

如何更改此项以填充第一个/第二个...直到第十五个div元素文件类型?

1 个答案:

答案 0 :(得分:0)

似乎page.uploadfile只接受简单的类似CSS的选择器,但没有像nth-child这样的额外修饰符,所以除非它们有自己的类或ID,否则无法定位所有输入。

但是......我们可以用page.evaluate来操纵页面!让我们给他们独特的课程:

total_inputs = page.evaluate(function(){
    // Assign different class names to all file inputs
    var inputs = document.querySelectorAll('input[type=file]'), i;
    for (i = 0; i < inputs.length; ++i) {
        inputs[i].className = "file" + i;
    }
    // pass back to PhantomJS scope information about how many inputs there are
    return inputs.length;
});

// Now upload those files!
for (q = 0; q < total_inputs; ++q) {
    page.uploadFile('input[class=file' + q + ']', 'test2.png');
}

结果:

The result

请注意,某些版本的PhantomJS无法上传文件。