PhantomJS: 在网页上添加Javascript include(而不是PhantomJS环境)。[英] PhantomJS: Add Javascript include to web page (not to PhantomJS environment)

问题描述

我想在 PhantomJS 访问的网页中添加一个 JavaScript <script></script> 标签,包含或获取不受信任的代码,并让页面的行为就像页面最初包含该标签一样.

includeJs()/injectJs() 不做我需要的 - 他们将代码注入我的 PhantomJS 环境,但我需要将我的代码注入网页.此外,这些函数将我的 PhantomJS 局部变量暴露给不受信任的代码,这是我不想要的.

evaluate() 也不做我需要的,因为它不会接受包含不受信任的 JavaScript 的字符串.相反,它希望我的 PhantomJS 脚本包含我编写的函数.

如何将不受信任的 JavaScript 注入使用 PhantomJS 访问的网页?

推荐答案

事实证明 page.evaluate() 接受传递给 JavaScript 函数的参数.利用这一点,我能够将要在页面上运行的实际 JavaScript 传递到从 page.evaluate() 运行的函数中,该函数将脚本块注入页面:

page = ...

function inject_js(js_code) {                                                                                                                                                               
    page.evaluate(function(js_code) {                                                                                                                                                       
        var js_block = document.createElement('script');                                                                                                                                    
        js_block.type = 'text/javascript';                                                                                                                                                  
        js_block.innerHTML = js_code;                                                                                                                                                       
        document.getElementsByTagName('body')[0].appendChild(js_block);                                                                                                                     
    }, js_code);                                                                                                                                                                            
}

本文地址:https://www.itbaoku.cn/post/1740006.html