Phantomjs / Casper不会在<iframe>

时间:2017-05-18 16:02:57

标签: javascript phantomjs casperjs

我正在进行此测试,我必须获取pdf文件的内容。 html结构(在传统浏览器的客户端渲染之后)就是这样的

&#xA;&#xA;
 &lt; iframe id =“frame”name =“frame”src =“链接”id =“frame”&gt;&#xA; &lt; embed id =“plugin”src =“src to pdf file”&gt;&#xA; pdf显示在这里&#xA; &LT; /嵌入&#XA;&LT; / iframe中&GT;&#XA;  
&#XA;&#XA;

当我输出上卡斯帕的IFRAME内容的HTML是空的,我的代码是这样的

&#xA;&#xA;
  casper.then(function(){&#xA; this.wait(5000);&#xA; casper.withFrame(' frame',function(){&#xA; //页面渲染,但它不会显示pdf&#xA; this.capture('pic.png');&#xA; this.evaluate(function() {&#xA; //查找&#xA; document.querySelector('body');&#xA; //返回null&#xA; document.querySelector('embed');&#xA;});&#xA ;});&#xA;);&#xA;  
&#xA;&#xA;

我不明白为什么幻影不会使用pdf文件呈现元素,有解决方法吗?

&#xA;

1 个答案:

答案 0 :(得分:2)

很难给你一个深入的答案,因为你没有提供Minimal, Complete, and Verifiable example。但是,我可以建议你解决几个问题:

1。修复语法错误

您的代码中存在一些语法错误,尤其是在您使用evaluate时。回调未正确传递,您不返回任何值。要测试evaluate结果,通常需要执行以下操作:

this.echo('Title: ' + this.evaluate(function () {
  return document.title;
}));

2。使用getHTML()检查<embed>是否存在

withFrame内,您可以使用以下行打印<iframe>的原始HTML代码:

console.log(this.getHTML());

这就是CasperJS实际看到的。

3。测试此脚本并仔细分析输出

var casper = require('casper').create();

casper.start('URL OF YOUR MAIN PAGE');

casper.then(function () {
  this.echo('Main page: ' + this.getTitle());
  this.wait(5000).withFrame('frame', function () {
    this.echo('iframe: ' + this.evaluate(function () {
      return document.title;
    }));
    this.capture('pic.png');
    console.log(this.getHTML());
  });
});

casper.run();