在 PhantomJS 中运行代码之前包含多个 JavaScript? [复制]

Posted

技术标签:

【中文标题】在 PhantomJS 中运行代码之前包含多个 JavaScript? [复制]【英文标题】:Include multiple JavaScript before the code runs in PhantomJS? [duplicate] 【发布时间】:2018-07-04 18:30:32 【问题描述】:

我想在 PhantomJS 中包含多个 javascript。 page.includeJS / page.injectJS 不显示包含多个脚本的选项。你能提供一个相同的工作示例吗?

代码:

page.open('index.html', function (openStatus) 
  console.log("OPen Status is "+openStatus)
  if(openStatus == 'success') 
    page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', function(jStatus) 
      console.log("Jquery status: "+jStatus)
      (page.includeJs('jquery.textillate.js', function(tStatus) 
        console.log("Text status: "+tStatus)
        (page.evaluate(function () 
          var tag = document.getElementById("main-tag")
          tag.innerHTML = "Hello World"
          document.getElementById("main-tag").textillate( 
            maxDisplayTime: 2000,
            in:  effect: 'fadeInUp',
            delay: 7000  
          );
          console.log('Textilate is: '+tag) 
        ))
      ))
    )
    // setInterval(function() 
    //   page.render('/dev/stdout',  format: "png" );
    //   if( frames == 0 )
    //       phantom.exit();
    //   
    //   frames--;
    // , 40);
  
);

错误: undefined 不是构造函数(评估 'document.getElementById("main-tag").textillate(

【问题讨论】:

你有什么错误? @AGoranov 只是无法加载多个 JS 文件。这是错误“TypeError: undefined is not a constructor (evalating 'document.getElementById("main-tag").textillate(" Trying to use texillate.js which requires jQuery. @Cerbrus 我的问题是包含多个 JS 文件并且不只注入一个 所以?有什么问题?是什么阻止您使用欺骗目标中描述的方法包含多个文件? @Cerbrus 脚本只是没有加载。你能提供一个可行的例子吗? 【参考方案1】:

undefined is not a constructor 表示您正在调用未定义的方法。 jquery.textillate.js 很可能对目标页面不可用,因为从代码示例判断它是一个本地脚本,并且要在 page.evaluate 中使用它,您应该使用 page.injectJs 方法。

还要回答您的另一个问题:有一种更简单的方法可以注入多个脚本。只需将它们全部放在一个捆绑的本地脚本中并注入即可。

【讨论】:

以上是关于在 PhantomJS 中运行代码之前包含多个 JavaScript? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

多个 PhantomJS 实例挂起

在新窗口中打开链接时,无法在queryselector中打开多个页面。在phantomjs中单击(目标=_空白)

如何获取嵌入在 PhantomJS 运行的 JS 的 HTML 页面结果中的 JSON 对象并将它们传递给 java 代码?

在PhantomJS上运行测试时避免使用键盘组合

PhantomJS for Angular 4

在 for 循环中包含多个条件