PhantomJS:注入脚本任何其他脚本运行之前(PhantomJS: injecting a sc

2019-07-21 19:20发布

使用PhantomJS,我想好像有一个额外注入一些JS <script>之前的任何其他标记<script>标记。 这是因为在页面上的脚本中使用某些功能PhantomJS没有,即Function.prototype.bindwindow.webkitRequestAnimationFrame 。 我有两个自定义实现一个JS文件,我想PhantomJS运行页面上的脚本时使用它们。

困难的是,如果我之前page.open做page.injectJs,脚本注入到一个空白页,而不是结转到页面被打开。

或者,如果我page.open后做page.injectJs,为时已晚的JavaScript错误(未定义功能)已经发生。

我发现,似乎工作,但显然是一个黑客的方式:

page.onResourceReceived = function() {
    page.injectJs('phantom-hacks.js')
};

这将给它多次(两次,每次资源,显然),不过没关系,因为我的剧本是幂等。 不过,我想知道正确的方式做到这一点:把它注射一次,并运行任何网页上的脚本之前。

谢谢 :)

Answer 1:

我不认为有一个“正确”的方式来注入比钩住事件等这样的脚本。 我花了半年时间与PhantomJs大量工作,发现没有办法之前所有的错误开始发生注入,但完成页面加载后。

我会尝试去通过onInitialized,onLoadStarted,onLoadFinished。 里面的钩我会打电话给page.evaluate(),这将只需修改DOM有你喜欢这个额外的任何地方。

我认为,他们(钩子)的一个应该给你正确的时间你想要的。

干杯



文章来源: PhantomJS: injecting a script before any other scripts run
标签: phantomjs