简体   繁体   English

PhantomJS:将Javascript include添加到网页(不是PhantomJS环境)

[英]PhantomJS: Add Javascript include to web page (not to PhantomJS environment)

I would like to add a JavaScript <script></script> tag, containing or sourcing untrusted code, to web pages PhantomJS visits, and have the page behave as if the page originally included the tag. 我想在PhantomJS访问的网页中添加一个包含或采购不受信任代码的JavaScript <script></script>标记,并使页面的行为就像页面最初包含标记一样。

includeJs() / injectJs() do not do what I need - they inject code into my PhantomJS environment, but I need my code injected into the web page. injectJs() includeJs() / injectJs()没有做我需要的 - 他们将代码注入我的PhantomJS环境,但我需要将我的代码注入到网页中。 Further, these functions expose my PhantomJS local variables to the untrusted code, which I do not want. 此外,这些函数将我的PhantomJS局部变量暴露给不信任的代码,这是我不想要的。

evaluate() does not do what I need either, as it will not take a string containing untrusted JavaScript. evaluate()不能做我需要的,因为它不会包含包含不受信任的JavaScript的字符串。 Instead, it expects my PhantomJS script to include a function I wrote. 相反,它希望我的PhantomJS脚本包含我写的函数。

How can I inject untrusted JavaScript into a web page I visit with PhantomJS? 如何将不受信任的JavaScript注入我使用PhantomJS访问的网页?

It turns out page.evaluate() accepts arguments that are passed to your JavaScript function. 事实证明, page.evaluate()接受传递给JavaScript函数的参数。 Capitalizing on that, I was able to pass the actual JavaScript I want to run on my page into a function run from page.evaluate() which injects a script block into the page: 利用它,我能够将我想在页面上运行的实际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);                                                                                                                                                                            
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM