私はcURLを使用してさまざまなページにアクセスしています。ページにjavascriptリダイレクトがあるかどうかをチェックするエレガントな方法が必要です。本文にaが含まれているかどうかを確認できましwindow.location
たが、.jsファイル内にあるか、jQueryなどのライブラリを使用している可能性があるため、どのソリューションも完璧ではないようです。誰かアイデアはありますか?
4 に答える
phantomjsを指摘してくれたIkstarに感謝し、次の例を作成しました。
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
スクリプトを解析するだけでは実行できません。実行するだけで、ページのJSの実際のフローが表示されます。
実行を模倣する1つの方法は、リダイレクトを持つさまざまなレベルのコードレベルを使用することです。一番上は<script>
タグの下にあり、ここでのリダイレクトはストレートリダイレクトになります。関数内でリダイレクトが見つかった場合は、プログラムの構造を追跡して推測する必要があります。
Curlを使用する目的に応じて、実際にページでリダイレクトが必要です。PhantomJS(http://phantomjs.org/)のようなヘッドレスフレームワークを組み込んで、必要なブラウジングを行うことができます。リダイレクトが発生するかどうかを確認したり、ページで実行されている他のJavaScriptを追跡したりできます。
Webページのソースコードを分析するだけでは、リダイレクトの存在を検出することはできません。
決定不可能な停止問題はJavaScriptでエンコードできます。アルゴリズムが停止してリダイレクトが生成されるか、永久に実行される可能性があります。コードが停止するかどうかわからないため、リダイレクトを実行するかどうかも判断できません。