Javascript 使用jQuery为casperjs选择按钮

Javascript 使用jQuery为casperjs选择按钮,javascript,jquery,phantomjs,casperjs,Javascript,Jquery,Phantomjs,Casperjs,我想选择一个带有casperjs的按钮,但我的问题是该按钮具有不断变化的id和classes。我只能根据span2个级别的文本“识别”按钮: <button class="changes-always" id="changes-always-too"> <div class="changes-always2"> <span class="changes-always3">Same text</span> </div&g

我想选择一个带有
casperjs
的按钮,但我的问题是该按钮具有不断变化的
id
classes
。我只能根据
span
2个级别的文本“识别”按钮:

<button class="changes-always" id="changes-always-too">
   <div class="changes-always2">
      <span class="changes-always3">Same text</span>
   </div>
</button>
通过将jQuery作为
clientScripts
,我得到了由
casperjs
加载的jQuery,我的问题是如何正确使用
evaluate(function()
,以及将变量用作
casperjs
的选择器(如果可能的话)

这就是我取得的成绩,但随后我遇到了
object
string
问题

casper.then(function() {
  var items = this.evaluate(function () {
        return $('span:contains("Some text")');
  });
  console.log(items);
});

如果有人能给我指出正确的方向,那就太好了,如何使用
jQuery
作为选择器,然后让
casperjs
使用它。提前感谢很多次!

如果文本是唯一的,你也可以使用clickLabel()

casper.clickLabel("Some text");
这也适用于按钮

另一个仍然不适用于jquery的选项应该是通过文本获取id,如果有时存在相同的文本,则通过索引将其取出:

...
var x = require('casper').selectXPath;
var buttonIDs;
// get button ID's with specific text by getElementsAttribute with xPath selector
buttonIDs = casper.getElementsAttribute(x("//button[contains(text(),'Some specific text')]"), 'id');
casper.then(function() {
  casper.echo(buttonIDs);
});
casper.then(function() {
  casper.click("button[id='" + buttonIDs[0] + "']");
});

...

你的方法应该有效。你需要用那个按钮做什么?有什么阻碍?我需要点击按钮,但不知道怎么做,或者干脆把它传递给casperjs.Works,但正如你所说的,只有在它是唯一的情况下。如果有更多的选择器具有相同的标签,则会失败。我更新了答案,添加了另一个选项。它仍然不适用于j查询,但我认为这是解决您的问题的可选方法。;)
...
var x = require('casper').selectXPath;
var buttonIDs;
// get button ID's with specific text by getElementsAttribute with xPath selector
buttonIDs = casper.getElementsAttribute(x("//button[contains(text(),'Some specific text')]"), 'id');
casper.then(function() {
  casper.echo(buttonIDs);
});
casper.then(function() {
  casper.click("button[id='" + buttonIDs[0] + "']");
});

...