Casperjs:如何单击远程div,然后更新其类名称?[英] casperjs: how do I click a remote div and then update it's class name?

问题描述

作为学习的一种方式 casperjs ,我正在尝试在远程页面上的Div上启动单击事件,然后在我单击它之后更改DIV的类名称.这个想法是找到第一个可单击的div,单击它,然后将其标记为单击,以便我可以跳过其他可单击的divs.远程页面上的DIV标签的标记看起来像:

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

我尝试了以下CASPERJS代码:

...
casper.then(function() {
    if( this.exists( 'div.clickable_div' ) ) {
        this.evaluate(function() {
            this.click(document.querySelector('div.clickable_div'));
            return document.querySelector('div.clickable_div').setAttribute("className","clicked");
        });
    }
});
...

它似乎不起作用.首先,我认为我没有正确地在DIV上启动鼠标点击事件.我想念什么?其次,当我获取更新的HTML时,我看不到DIV的类名称中的任何更改.我是否以错误的方式迈出了这一步骤?

推荐答案

您在evaluate()中正在调用this.click,它只是无法正常工作,因为evaluate()在页面dom上下文中执行代码,其中可能没有window.click方法.

这是一个可能工作的脚本:

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);
});

您可能想更好地处理错误和边缘案例,但是您明白了.

本文地址:https://www.itbaoku.cn/post/1740183.html