Javascript casperjs:如何单击远程div,然后更新它';她姓什么?

Javascript casperjs:如何单击远程div,然后更新它';她姓什么?,javascript,phantomjs,casperjs,Javascript,Phantomjs,Casperjs,作为一种学习方式,我尝试在远程页面上的一个div上启动一个click事件,然后在单击该div后更改其类名。想法是找到第一个可单击的div,单击它,然后将其标记为已单击,这样我就可以跳过它转到其他可单击的div。远程页面上div标记的标记如下所示: <div class='clickable_div'></div> 它似乎不起作用。首先,我认为我没有正确地启动div上的鼠标单击事件。我错过了什么?其次,当我获取更新的html时,我没有看到div的类名有任何更改。这一步我走

作为一种学习方式,我尝试在远程页面上的一个div上启动一个click事件,然后在单击该div后更改其类名。想法是找到第一个可单击的div,单击它,然后将其标记为已单击,这样我就可以跳过它转到其他可单击的div。远程页面上div标记的标记如下所示:

<div class='clickable_div'></div>

它似乎不起作用。首先,我认为我没有正确地启动div上的鼠标单击事件。我错过了什么?其次,当我获取更新的html时,我没有看到div的类名有任何更改。这一步我走错了吗

您正在调用
此。单击
评估()
中的
,它无法工作,因为
评估()
在可能没有
窗口的页面DOM上下文中执行代码。单击
方法

下面是一个可能的工作脚本:

var linkSelector = 'div.clickable_div';

casper.then(function() {
    if (!this.exists(linkSelector)) return;
    this.click(linkSelector);
    this.evaluate(function(linkSelector) {
        __utils__.findOne(linkSelector).setAttribute("className", "clicked");
    }, linkSelector);
});

您可能希望更好地处理错误和边缘情况,但您已经有了主意。

您正在调用
这个。单击
evaluate()
中的
,它无法工作,因为
evaluate()
在可能没有
窗口的页面DOM上下文中执行代码。单击
方法

下面是一个可能的工作脚本:

var linkSelector = 'div.clickable_div';

casper.then(function() {
    if (!this.exists(linkSelector)) return;
    this.click(linkSelector);
    this.evaluate(function(linkSelector) {
        __utils__.findOne(linkSelector).setAttribute("className", "clicked");
    }, linkSelector);
});
您可能希望更好地处理错误和边缘情况,但您已经明白了