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

标签 javascript phantomjs

我想添加一个 JavaScript <script></script>标签,包含或采购不受信任的代码,到网页 PhantomJS 访问,并让页面表现得就像页面最初包含标签一样。

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

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

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

最佳答案

原来 page.evaluate() 接受传递给 JavaScript 函数的参数。利用这一点,我能够将我想在页面上运行的实际 JavaScript 传递到从 page.evaluate() 运行的函数中,该函数将脚本 block 注入(inject)页面:

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

关于javascript - PhantomJS:将 Javascript 添加到网页(不是 PhantomJS 环境),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21395141/

相关文章:

javascript - 悬停淡出过渡,鼠标仍在其上

javascript - 文本淡入后加载 Bootstrap slider

ruby-on-rails-4 - Ruby on Rails 无法加载此类文件 -- selenium-webdriver 错误

jasmine - JSOver 与 PhantomJS - 类型错误 : 'null' is not an object

java - Selenium PhantomJS Java - 拒绝评估字符串,因为不允许使用 'unsafe-eval'

javascript - Angular 应用程序的参数化

javascript - jQuery DOM 属性值

javascript - 使用 "deep"数组 react useState 不重新渲染组件

javascript - 如何使用 async/await 方法将对象传递到 phantom js 页面?

javascript - phantomjs:将base64字符串保存为文件(png)