Javascript CasperJS选择具有指定文本的复选框

Javascript CasperJS选择具有指定文本的复选框,javascript,checkbox,casperjs,Javascript,Checkbox,Casperjs,我想使用casperJS自动选择一个复选框 <tr> <td style=" text-align:center;"> <input type="checkbox" data-rowindex="1" data-crdid="0005442" data-numcrd="3" value=""> </td> <td>Data Structures and Algorithms</td>

我想使用casperJS自动选择一个复选框

<tr>
    <td style=" text-align:center;">
        <input type="checkbox" data-rowindex="1" data-crdid="0005442" data-numcrd="3" value="">
    </td>
    <td>Data Structures and Algorithms</td>
    <td>INT2203></td>
</tr>
<tr>
    <td style=" text-align:center;">
        <input type="checkbox" data-rowindex="2" data-crdid="0005682" data-numcrd="3" value="">
    </td>
    <td>Machine Learning</td>
    <td>INT2204></td>
</tr>
<tr>
    <td style=" text-align:center;">
        <input type="checkbox" data-rowindex="3" data-crdid="003643" data-numcrd="3" value="">
    </td>
    <td>Artificial Intelligence</td>
    <td>INT2205></td>
</tr>

数据结构和算法
INT2203>
机器学习
INT2204>
人工智能
INT2205>
第一列是要选择的复选框。 第二个是主题的名称,最后一个是主题的ID

现在我只知道主题的ID:INT2204,我想用casperjs来选择这个主题的框。然而,唯一需要区别的是
数据crdid
,我对此一无所知


casperjs是否仍然可以选中ID为“INT2204”的主题的复选框?

您可以使用jQuery筛选元素并获取同级元素。如果注入jQuery(如果还没有),CasperJS可以在页面内部对其进行评估

注入jQuery:

casper = require('casper').create();
casper.start();
casper.open('some url');
casper.then(function doSomething() {
    this.page.injectJs('relative/local/path/to/jquery.js');
     this.evaluate(function (courseId) {
        $('td').filter(function() {
            return $(this).text() === courseId;
        }).siblings().find('input').prop('checked', true);
    }, 'INT2203>');
});
浏览器中的示例:

var-courseId='INT2203>';
$('td').filter(函数(){
返回$(this).text()==courseId;
}).sides().find('input').prop('checked',true)

复选框测试
数据结构和算法
INT2203>
机器学习
INT2204>
人工智能
INT2205>

我终于找到了一种不用jQuery解决问题的方法

以下是我从answer复制的HTML代码:

在那之后,一切都很简单。我只需要根据主题的ID选择主题,
数据crdid
将在数组
数据中具有相同的索引

 casper.then(function () {
     selected = data[id.indexOf(subject)];
 });

 casper.thenEvaluate(function (selected) {
     document.querySelector('input[data-crdid="' + selected + '"]').click();
 }, selected);
以下是完整的代码:

var casper = require('casper').create();
var subject = 'INT2204';

casper.start();
casper.thenOpen('/{{ URL }}');

casper.then(function () {
       // Select all the subject IDs in the table
       var id = this.getElementsInfo('table tr td:nth-child(3)')
                    .map(function (value, index, array) {
           return array[index].text();
       }); 

       // Select all the data-crdid in the table
       var data = this.getElementsInfo('table tr td input', 'data-crdid');

       var selected = data[id.indexOf(subject)];

       this.thenEvaluate(function (selected) {
         document.querySelector('input[data-crdid="' + selected + '"]').click();
       }, selected);
});

casper.run();

大多数情况下,jQuery已经可用,但如果不可用,我将编辑我的答案。我正在尝试使用您的解决方案,但当选择id的
不是函数时,它会抱怨数组部分(计算'array[index].text()')
 casper.then(function () {
     selected = data[id.indexOf(subject)];
 });

 casper.thenEvaluate(function (selected) {
     document.querySelector('input[data-crdid="' + selected + '"]').click();
 }, selected);
var casper = require('casper').create();
var subject = 'INT2204';

casper.start();
casper.thenOpen('/{{ URL }}');

casper.then(function () {
       // Select all the subject IDs in the table
       var id = this.getElementsInfo('table tr td:nth-child(3)')
                    .map(function (value, index, array) {
           return array[index].text();
       }); 

       // Select all the data-crdid in the table
       var data = this.getElementsInfo('table tr td input', 'data-crdid');

       var selected = data[id.indexOf(subject)];

       this.thenEvaluate(function (selected) {
         document.querySelector('input[data-crdid="' + selected + '"]').click();
       }, selected);
});

casper.run();