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, evaluate函数总是返回null。但是当我尝试启用javascript时,evaluate函数将返回一些值。是否有任何想法,以禁用在页面中的javascript,但我包含的javascript必须工作?
不
page.evaluate()
在页面上执行JavaScript。如果你禁用JavaScript在PhantomJS,那么你有效地不能使用page.evaluate()
了。访问DOM元素的各种方式也随之而去。page.includeJs()
也将不工作,因为它的脚本不能在页面上执行。
您仍然可以访问page.content
,它提供对当前页面源(计算源)的访问。您可以尝试使用一些DOM库将源解析为DOM对象1,或者如果任务很简单,您可以尝试使用正则表达式。
1请注意,PhantomJS和node.js有不同的执行环境,所以大多数处理DOM的node.js模块将无法工作
根据Artjom的建议,如果不禁用PhantomJS在页面上执行JavaScript的能力,则无法禁用目标网站JavaScript的执行。然而,有一种简单的方法可以确保目标网站不执行脚本(最终达到相同的结果)。
- 创建一个HTTP代理,拦截所有请求。
- 使用
Content-Type: text/html
检测响应 - 从文档中删除所有
<script>
标签。
您可以使用--proxy
配置配置phantomjs使用代理。
使用http-proxy创建代理服务器
使用cheerio
来删除、注释掉或使<script>
标记无效。
相关文章:
- 语义ui如何使用javascript启用或禁用下拉列表
- 如何通过Javascript启用链接按钮最初设置为Enable=false
- 内联JavaScript启用/禁用点击单选按钮上的选择和文本框
- 禁用基于下拉列表选择 asp.net JavaScript 启用文本框
- 使用 javascript 启用/禁用按钮
- 使用javascript启用和禁用复选框
- 如何使用JavaScript启用右键单击
- 使用 JavaScript 启用/禁用文本框和按钮
- 使用 Javascript 启用和禁用输入字段
- 通过javascript启用两个具有相同ID的提交按钮
- CRM 2011 - 使用 JavaScript 启用潜在顾客实体的工作流加载
- JavaScript 启用新的 HTML5 按钮属性:formaction、formmethod
- 使用 Javascript 启用复选框
- jquery/JavaScript 启用和禁用选择菜单.我做错了什么
- 使用JavaScript启用和禁用浏览器JavaScript选项
- 如何访问智能手机'使用javascript启用或禁用s gps服务
- 选中复选框时,Javascript启用文本字段
- 使用JavaScript启用/禁用onclick
- 我应该如何使用jquery或javascript启用复选框
- 使用JavaScript启用Textbox/combobox/RadDatePicker更改按钮