2017-06-01 102 views
0

我是一个新手,最近开始与casperjs一起使用phantomjs。我想从iframe获取信息,但phantomjs无法加载它。Phantomjs无法加载iframe

这是我的脚本:

var casper = require('casper').create({ 
    verbose: true, 
    logLevel: "debug", 
    waitTimeout: 20000, 
    retryTimeout: 100, 
    viewportSize: { 
    width: 1920, 
    height: 1080 
    }, 
    pageSettings: { 
     "userAgent": 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1' 
    }, 
    localToRemoteUrlAccessEnabled: true 
}); 

casper.start(); 

casper.open('http://www.badboysbarber.ru/online'); 

casper.waitForSelector('.y-main-container', function() { 
    this.echo("Selector appeared."); 
}); 

casper.then(function() { 
    this.capture('screen.png'); 
}); 

casper.run(); 

因此,幻影抛出一个错误(虽然选择正确定义):

[error] [phantom] Wait timeout of 20000ms expired, exiting. 

可能有人帮助我吗?也许我做错了什么?谢谢。

回答

0

iframe将文档加载到另一个文档中。如果您想使用框架并使用CasperJS获取数据,那么您可能需要withFrame()中的Casper.prototype

下面的脚本捕捉你的主页的第一iframe的原始HTML内容:

var casper = require('casper').create({ 
    viewportSize: { 
    width: 1920, 
    height: 1080 
    }, 
    pageSettings: { 
    'userAgent': 'Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1' 
    }, 
    localToRemoteUrlAccessEnabled: true 
}); 

casper.start('http://www.badboysbarber.ru/online'); 

casper.withFrame(0, function() { 
    this.echo(this.getHTML()); // HTML code of the first iframe 
}); 

casper.run(); 
+0

很抱歉,但即使你使用withFrame功能,它无法加载一个iframe。试着使用'this.captureSelector('selector.png','.y-main-container');'而不是'this.echo(this.getHTML());'里面的withFrame函数,你会看到。这是整个问题。 –

+0

此外,您还可以查看[此主题](https://groups.google.com/forum/#!topic/casperjs/AtbXjGnp7M0)。 –

+0

如果您可以获取HTML代码,那么'iframe'显然会加载。你只有'capture'的问题。我用SlimerJS尝试'this.capture('screenshot.png');'withFrame'内部',并且我可以看到'iframe',不仅在SlimerJS正在处理页面时,而且在得到的屏幕截图上:http:// imgur.com/a/gWtiY – Badacadabra