我正在使用cURL访问许多不同的页面。我想要一种优雅的方式来检查页面是否有javascript重定向。我可以检查正文中是否存在window.location
,但因为它可能位于.js文件中或使用类似jQuery的库,所以似乎任何解决方案都不是完美的。有人有什么想法吗?
答案 0 :(得分:2)
感谢Ikstar指出phantomjs,我制定了以下示例:
<强> test.js 强>
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
答案 1 :(得分:0)
仅通过解析脚本无法做到这一点。只有执行才能显示页面JS的真实流程。
模仿执行的一种方法是使用不同级别的代码级别进行重定向。最重要的是<script>
标记,此处的任何重定向都是直接重定向。如果在函数内找到任何重定向,那么你必须跟踪程序的结构并进行猜测。
答案 2 :(得分:0)
取决于使用Curl的目的,实际上需要在页面上重定向。可以使用像PhantomJS(http://phantomjs.org/)这样的无头框架来进行必要的浏览。您将能够看到是否会发生重定向以及跟踪页面上执行的任何其他javascript。
答案 3 :(得分:0)
仅通过分析网页源代码来检测重定向的存在是不可能。
不确定的Halting problem可以用JavaScript编码。该算法可能会暂停,从而导致重定向的产生,或者永远运行。由于我们不知道代码是否会暂停,因此也无法决定是否执行重定向。