Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Can';t使用CasperJS单击有效选择器_Javascript_Css Selectors_Casperjs - Fatal编程技术网

Javascript Can';t使用CasperJS单击有效选择器

Javascript Can';t使用CasperJS单击有效选择器,javascript,css-selectors,casperjs,Javascript,Css Selectors,Casperjs,使用Casperjs,我试图向页面上的一个链接发送一个click事件。它的位置取决于窗口的大小,因此存在多个实例。因此,我使用基于其父级的选择器。我不发送偶数,直到确认它不等于undefined,并且我之前检查了null。当我打印与我正在使用的选择器匹配的对象时,我会得到[object object],但当我尝试分派click事件时,我会收到一个错误,说明“无法分派不存在的选择器上的mousedown事件”。如果querySelectorAll()为同一选择器返回对象,这怎么可能呢。这是我正在使

使用Casperjs,我试图向页面上的一个链接发送一个click事件。它的位置取决于窗口的大小,因此存在多个实例。因此,我使用基于其父级的选择器。我不发送偶数,直到确认它不等于
undefined
,并且我之前检查了
null
。当我打印与我正在使用的选择器匹配的对象时,我会得到
[object object]
,但当我尝试分派click事件时,我会收到一个错误,说明
“无法分派不存在的选择器上的mousedown事件”
。如果
querySelectorAll()
为同一选择器返回对象,这怎么可能呢。这是我正在使用的代码`

casper.each(links, function() {
this.waitFor(function check() {
    return (this.evaluate(getSelector,'div.talk-hero__tools__list__actions a.rate-button') != undefined);
    },
    function then() {
        this.echo(this.evaluate(getSelector,'div.talk-hero__tools__list__actions a.rate-button'));
        this.click('div.talk-hero__tools__list__actions a.rate-button');
});
});
尝试此操作(在调用
evaluate
时添加匿名函数,并将选择器检查从
未定义
切换到
null
):


因此,
casper.each()
并没有打开链接。我通过在
each()
中的所有代码周围添加一个
casper来解决这个问题

你为什么不使用waitForSelector?我还没有意识到它的存在。然而,当我尝试它时,我看到了与我遵循下面建议时相同的结果。你试图使TED自动化,对吗?奇怪的是,我在使用
waitForSelector
单击时没有出现这样的错误,但页面上也没有发生任何事情。我正在使用幻影1.9.7和casper 1.1.0-beta3。事实上,我非常敏锐。我试过这个,它超时了。如果对该选择器的查询以前返回了值,那么这怎么可能呢?您知道,这个答案对这个问题没有意义,因为它没有说明任何关于
每个
打开
。也许您应该编辑您的问题(通过添加脚本的一部分)以匹配您的答案。
this.waitFor(function check() {
  return this.evaluate(function() {
    return document.querySelector('div.talk-hero__tools__list__actions a.rate-button') !== null;
  });
}, function then() {
    this.echo(this.evaluate(getSelector,'div.talk-hero__tools__list__actions a.rate-button'));
    this.click('div.talk-hero__tools__list__actions a.rate-button');
});