目标html就像
<script src="http://static.com/js/qiyi/config.js" type="text/javascript">
<dl class="selected">
<dt>
<span data-value="2014">2014年</span>
</dt>
</dl>
<dl>
<dt>
<span data-value="2013">2013年</span>
</dt>
</dl>
不是一个简单的锚标签,所以在我的浏览器中,当我点击span标签时,它会调用config.js做某事(我不知道它做了什么),它会改变内容。但是当我使用
时this.click()
模拟鼠标操作,它不起作用。 因为我知道casperjs可以像浏览器一样工作。 如果我想抓取不同年份的内容,我该怎么办
我的代码是
var casper = require("casper").create({
clientScripts: [
"jquery-1.7.2.js",
"config.js"], //in url page call this js
remoteScripts: ["http://static.qiyi.com/js/qiyi/config.js"],//also the config.js
stepTimeout: 120 * 1000, //单步超时时间
pageSettings: {
loadImages: false
},
verbose: true,
logLevel: "error"
});
var fs = require('fs');
var filename = 'content.txt';
casper.on('resource.received', function(resource) {
casper.echo(resource.url);
});
casper.on('click', function(resource) {
casper.echo("click");
});
casper.on("page.error", function(msg, trace) {
this.echo("Error: " + msg, "ERROR");
});
casper.on("resource.error", function(resourceError {
console.log(JSON.stringify(resourceError));});
casper.start("http://www......");
casper.then(function() {
this.evaluate(function(){
document.querySelectorAll('[data-value="2013"]')[0].click();
//it does not work
});
this.echo("click");
});
casper.then(function() {
this.click('span[data-value="2013"]');
//it does not work
fs.write(filename, this.getHTML(), 'w');
this.echo("click");
});
casper.run();
答案 0 :(得分:1)
如果你第一次使用js,你必须确定如何调试,包括page.error和捕获事件很重要。像
casper.on("click", function(){this.echo();});
casper.on("page.error", function(){this.echo();});
事件发生你可以得到。 对于这个问题,点击后,必须有一些时间来接收资源。
this.wait(5000, function(){fs.write(...);})
谢谢@ArtjomB。
答案 1 :(得分:0)
您可能想要使用casper.evaluate
casper.evaluate(function() {
document.querySelectorAll('[data-value="2014"]')[0].click();
});
答案 2 :(得分:0)
在评估函数之外使用clickLabel函数Works代码中的span
casper.then(function(){
this.clickLabel('2014', 'span');
});