[英]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.