我正在使用phantomjs从页面检索CSS信息而不执行其javascript。例如,这里是代码段。
val lines = sc.textFile("s3://{bucket}/whatever/2015/05/*.*")
//add the map
.map(line => line.replaceAll("\",\"", ";"))
.map(_.split(","))
.map(p=> zahiro(p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7)))
如果我禁用了javascript,则evaluate函数始终返回null。但是当我尝试启用javascript时,evaluate函数将返回一些值。是否有任何想法禁用页面中的JavaScript,但我包含的JavaScript必须工作?
答案 0 :(得分:4)
否强>
page.evaluate()
在页面上执行JavaScript。如果您在PhantomJS中禁用JavaScript,那么您实际上无法再使用page.evaluate()
了。随之而来的是访问DOM元素的各种方式。 page.includeJs()
也不起作用,因为脚本无法在页面上执行。
您仍然可以访问page.content
,它可以访问当前页面源(计算源)。您可以尝试使用某些DOM库将源解析为DOM对象 1 ,或者如果任务很简单,您可以尝试使用正则表达式。
1 请注意,PhantomJS和node.js具有不同的执行环境,因此大多数处理DOM的node.js模块都无法工作
答案 1 :(得分:1)
作为suggested by Artjom,没有禁用PhantomJS在页面上执行JavaScript的能力,就无法禁用目标网站JavaScript的执行。但是,有一种简单的方法可以确保目标网站不会执行任何脚本(最终会获得相同的结果)。
Content-Type: text/html
检测回复。<script>
标记。您可以使用phantomjs配置--proxy
configuration以使用代理。
使用http-proxy创建代理服务器。
使用cheerio
删除,注释或以其他方式使<script>
代码无效。