如何应用 :contains pseudo class for PhantomJS/CasperJS?

How to apply :contains pseudo class for PhantomJS/CasperJS?

有没有办法 select 包含指定文本的标签,例如 :contains select 或者在 CasperJS 中使用 jQuery?

您可以使用 (clientScripts or remoteScripts) 将 jQuery 注入页面,并根据页面上下文(在 casper.evaluate() 内)注入 select 元素:

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 实用程序用于 select 基于文本的元素:

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')]]")