PhantomJS:将JavaScript包含添加到网页(而不是PhantomJS环境) [英] PhantomJS: Add Javascript include to web page (not to PhantomJS environment)

查看:93
本文介绍了PhantomJS:将JavaScript包含添加到网页(而不是PhantomJS环境)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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.

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

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. Further, these functions expose my PhantomJS local variables to the untrusted code, which I do not want.

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

evaluate() does not do what I need either, as it will not take a string containing untrusted JavaScript. Instead, it expects my PhantomJS script to include a function I wrote.

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

How can I inject untrusted JavaScript into a web page I visit with PhantomJS?

推荐答案

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

It turns out page.evaluate() accepts arguments that are passed to your JavaScript function. 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:

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);                                                                                                                                                                            
}

这篇关于PhantomJS:将JavaScript包含添加到网页(而不是PhantomJS环境)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆