我正在使用 cURL 访问许多不同的页面。我想要一种优雅的方式来检查页面是否有 javascript 重定向。我可以检查window.location
正文中是否存在 a,但因为它可能位于 .js 文件中或使用 jQuery 之类的库,所以似乎任何解决方案都不完美。有人有想法么?
问问题
5351 次
4 回答
2
感谢 Ikstar 指出 phantomjs,我制定了以下示例:
测试.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
于 2012-11-27T15:11:10.343 回答
0
您不能仅通过解析脚本来做到这一点。只有执行才会显示页面JS的真实流程。
模仿执行的一种方法是具有具有重定向的不同级别的代码级别。最上面的将在<script>
标签下,这里的任何重定向都是直接重定向。如果在函数中发现任何重定向,那么您必须跟踪程序的结构并进行猜测。
于 2012-11-26T20:08:07.523 回答
0
根据使用 Curl 的目的和实际需要在页面上进行重定向。可以合并像 PhantomJS (http://phantomjs.org/) 这样的无头框架来进行必要的浏览。您将能够查看是否会发生重定向以及跟踪页面上执行的任何其他 javascript。
于 2012-11-26T21:17:07.997 回答
0
仅仅分析网页源代码是不可能检测到重定向的。
不可判定的停机问题可以用 JavaScript 编码。该算法可能会停止,从而导致生成重定向,或者永远运行。由于我们不知道代码是否会停止,因此也不可能决定是否执行重定向。
于 2019-10-09T20:27:50.297 回答