如何申请:包含PhantomJS / CasperJS的伪类?

时间:2015-02-26 22:38:33

标签: jquery-selectors casperjs

有没有办法选择包含指定文本的标记,例如:contains选择器在CasperJS中使用jQuery?

1 个答案:

答案 0 :(得分:0)

您可以使用(clientScriptsremoteScripts)将jQuery注入页面,并根据页面上下文中的内容选择元素(在casper.evaluate()内):

var casper = require('casper').create({
    remoteScripts:  [
        'http://code.jquery.com/jquery-1.11.2.min.js'
    ]
});

casper.start(url, function(){
    var text = this.evaluate(function(){
        return $("div:contains('asdf')").text();
    });
    this.echo(text);
}).run();

请注意,DOM元素无法从页面上下文传递到外部。您需要构建元素的一些表示。

另一种可能性是使用CasperJS的XPath实用程序来选择基于文本的元素:

var casper = require('casper').create(),
    x = require('casper').selectXPath;

casper.start(url, function(){
    this.echo(this.fetchText(x("//div[contains(text(),'asdf')]")));
}).run();

XPath text()函数与jQuery的:contains()不同,因为它只查看当前节点的文本内容(单个文本节点)并查看其后代。这可以改进,但通过观察后代仍然不是完全相同的事情:

x("//div[.//*[contains(text(),'asdf')]]")