我正在使用cURL访问许多不同的页面。我希望找到一种简洁的方法来检查页面是否有JavaScript重定向。我可以通过检查中是否存在window.location
来实现,但是因为它可能在.js文件中或使用类似jQuery的库,所以任何解决方案似乎都不会完美。有人有什么想法吗?
我正在使用cURL访问许多不同的页面。我希望找到一种简洁的方法来检查页面是否有JavaScript重定向。我可以通过检查中是否存在window.location
来实现,但是因为它可能在.js文件中或使用类似jQuery的库,所以任何解决方案似乎都不会完美。有人有什么想法吗?
var page = require('webpage').create();
var testUrls = [
"http://www.google.nl",
"http://www.example.com"
];
function testNextUrl()
{
var testUrl = testUrls.shift();
page.open(testUrl, function() {
var hasRedirect = page.url.indexOf(testUrl) !== 0;
console.log(testUrl + ": " + hasRedirect.toString());
if (testUrls.length) {
testNextUrl();
} else {
phantom.exit();
}
});
}
testNextUrl();
结果:
D:\Tools\phantomjs-1.7.0-windows>phantomjs test.js
http://www.google.nl: false
http://www.example.com: true
仅通过解析脚本是无法完成的。只有执行才能展示页面JS的真实流程。
模拟执行的一种方法是具有重定向的不同代码级别。最顶层将位于<script>
标签下,任何重定向都将是直接重定向。如果在函数内发现任何重定向,则必须跟踪程序结构并进行猜测。
根据使用Curl的目的以及实际需要页面重定向的情况,可以使用无头框架如PhantomJS(http://phantomjs.org/)来进行必要的浏览。您将能够看到是否会发生重定向,并跟踪页面上执行的任何其他JavaScript。
仅通过分析网页源代码是不可能检测到重定向的存在。
停机问题是无法判定的,可以在JavaScript中进行编码。该算法可能会停止,导致生成重定向,或者永远运行。由于我们不知道代码是否会停止,因此也无法确定是否执行重定向。