我想在iframe的网站上获取信息。
当我用这个命令用casperjs解析这个网站时:
casper.then(function() {
casper.waitFor(function() {
return this.withFrame('mainframe', function() {});
}, function() {
this.withFrame('mainframe', function() {
console.log(this.echo(this.getHTML()));
});
});
});
我的问题是结果,我只有一个iframe的内容。
如何获取我网站上任何iframe的结果?
答案 0 :(得分:0)
CasperJS没有专门提供等待iframe加载的功能。但是,您可以使用waitForResource()
步骤函数等待iframe资源,然后对其执行操作。
casper.waitForResource(function check(res){
var iframeSrc = this.getElementAttribute("iframe[name='mainframe']", "src");
return res.url.indexOf(iframeSrc) > -1;
}, function(){
// success
});
收到资源后,您可以在iframe内等待特定选择器,以便在iframe完全加载后继续使用您的脚本:
casper.waitForResource(function check(res){
var iframeSrc = this.getElementAttribute("iframe[name='mainframe']", "src");
return res.url.indexOf(iframeSrc) > -1;
}).withFrame('mainframe', function(){
this.waitForSelector("someSelectorForAnElement thatIsLoadedAtTheEnd", function(){
this.echo(this.getHTML());
});
});
casper.waitFor(function() {
return this.withFrame('mainframe', function() {});
}, function() {
此代码根本不会等待。 CasperJS支持Fluent API,因此您可以将多个步骤函数链接在一起,如下所示:
casper.start(url)
.then(function(){...})
.wait(3000)
.then(function(){...})
.run();
这意味着withFrame()
的结果是casper
对象,对于该检查函数,该对象被评估为true
。没有等待的时间。
console.log(this.echo(this.getHTML()));
没有意义,因为casper.echo()
已经打印到控制台。使用
console.log(this.getHTML());
或
this.echo(this.getHTML());
但不是两者。