如何应用 :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')]]")
有没有办法 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')]]")