Phantomjs 在页面中禁用 javascript 但启用包含 javascript
Phantomjs disable javascript in page but enable included javascript
我正在使用 phantomjs 从页面检索 CSS 信息而不执行其 javascript。例如这里是代码片段。
page.settings.javascriptEnabled = false;
page.open('file:///home/sample.html', function(status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
page.includeJs("file:///home/sample.js", function() {
var class = page.evaluate(function() {
return document.querySelector('body').className;
});
console.log(class);
});
}
}
如果我禁用 javascript,求值函数总是 return 为空。但是当我尝试启用 javascript 时,评估函数将 return 一些值。有没有办法禁用页面中的 javascript,但我包含的 javascript 必须工作?
否
page.evaluate()
在页面上执行 JavaScript。如果您在 PhantomJS 中禁用 JavaScript,那么实际上您不能再使用 page.evaluate()
。随之而来的是各种访问 DOM 元素的方式。 page.includeJs()
也不行,因为脚本无法在页面上执行。
您仍然可以访问 page.content
,它提供对当前页面源(计算源)的访问。您可以尝试使用一些 DOM 库将源解析为 DOM 对象 1 或者如果任务很简单,您可以尝试使用正则表达式。
1 注意 PhantomJS 和 node.js 有不同的执行环境,所以大多数 node.js 处理 DOM 的模块不会工作
与一样,如果不禁用PhantomJS在页面上执行JavaScript的能力,则无法禁用目标网站JavaScript的执行。但是,有一种简单的方法可以确保目标网站不执行任何脚本(最后达到相同的结果)。
- 创建拦截所有请求的 HTTP 代理。
- 检测
Content-Type: text/html
的响应。
- 从文档中删除所有
<script>
个标签。
您可以配置phantomjs to use proxy using --proxy
configuration。
使用http-proxy创建代理服务器。
使用 cheerio
删除、注释掉或以其他方式使 <script>
标签无效。
我正在使用 phantomjs 从页面检索 CSS 信息而不执行其 javascript。例如这里是代码片段。
page.settings.javascriptEnabled = false;
page.open('file:///home/sample.html', function(status) {
if (status !== 'success') {
console.log('Unable to access network');
} else {
page.includeJs("file:///home/sample.js", function() {
var class = page.evaluate(function() {
return document.querySelector('body').className;
});
console.log(class);
});
}
}
如果我禁用 javascript,求值函数总是 return 为空。但是当我尝试启用 javascript 时,评估函数将 return 一些值。有没有办法禁用页面中的 javascript,但我包含的 javascript 必须工作?
否
page.evaluate()
在页面上执行 JavaScript。如果您在 PhantomJS 中禁用 JavaScript,那么实际上您不能再使用 page.evaluate()
。随之而来的是各种访问 DOM 元素的方式。 page.includeJs()
也不行,因为脚本无法在页面上执行。
您仍然可以访问 page.content
,它提供对当前页面源(计算源)的访问。您可以尝试使用一些 DOM 库将源解析为 DOM 对象 1 或者如果任务很简单,您可以尝试使用正则表达式。
1 注意 PhantomJS 和 node.js 有不同的执行环境,所以大多数 node.js 处理 DOM 的模块不会工作
与
- 创建拦截所有请求的 HTTP 代理。
- 检测
Content-Type: text/html
的响应。 - 从文档中删除所有
<script>
个标签。
您可以配置phantomjs to use proxy using --proxy
configuration。
使用http-proxy创建代理服务器。
使用 cheerio
删除、注释掉或以其他方式使 <script>
标签无效。