gpt4 book ai didi

PhantomJS:在任何其他脚本运行之前注入(inject)脚本

转载 作者:行者123 更新时间:2023-12-03 11:28:00 26 4
gpt4 key购买 nike

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

困难在于,如果我在 page.open 之前执行 page.injectJs,则脚本会被注入(inject)到一个空页面中,并且不会转移到正在打开的页面中。

或者,如果我在 page.open 之后执行 page.injectJs,则为时已晚,因为 JavaScript 错误(未定义的函数)已经发生。

我找到了一种似乎可行的方法,但显然是一种 hack:

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

这会注入(inject)很多次(显然,每个资源两次),但这没关系,因为我的脚本是幂等的。但是,我想知道执行此操作的正确方法:仅在页面上的任何脚本运行之前注入(inject)一次。

谢谢 :)

最佳答案

除了 Hook 事件之外,我认为没有“正确”的方式来注入(inject)此类脚本。
我花了半年时间大量使用 PhantomJs,发现在所有错误开始发生之前但在页面完成加载之后无法注入(inject)。

我会尝试通过 onInitialized、onLoadStarted、onLoadFinished。在钩子(Hook)内部,我会调用 page.evaluate() ,它只会修改 DOM 以在任何你喜欢的地方拥有这个额外的东西。

我认为其中一个(钩子(Hook))应该给你你想要的正确时机。

干杯

关于PhantomJS:在任何其他脚本运行之前注入(inject)脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15459049/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com