私はCasperJS(/ PhantomJS)のNavigatorプラットフォームプロパティを偽装したいと思います。私は、ウェブ上の他の多くの場所で提案されているページのロードでのナビゲーターオブジェクトを上書きするのは簡単解決策を見つけた:偽のナビゲータプロパティ
casper.on('page.initialized', function(){
this.evaluate(function(){
(function(oldNav){
var newNav = {};
[].forEach.call(Object.getOwnPropertyNames(navigator), function(prop){
if (prop === 'platform') {
Object.defineProperty(newNav, prop, {
value: 'Win64'
}); }else {
Object.defineProperty(newNav, prop, {
get: function(){
return oldNav[prop];
}
});
}
});
window.navigator = newNav;
})(window.navigator);
});
});
しかし、問題は、我々はインラインフレームからナビゲーターのプロパティを取得する場合、値が残っているということです元のものは、page.initializedはメインページ用にのみ設定されています。 私はソースコードを変更してビルドを再開しました。私はgitリポジトリからPhantomjsをダウンロードし、ハードコードされたプラットフォームの値(私の場合はLinux x86_64)を探しました。ハードコードされた文字列が見つかりました./phantomjs/src/qt/qtwebkit/Source/WebCore/platform/qt/UserAgentQt.cpp
私は文字列に変更しました。私はnavigator.platformとして返りたいですが、navigator.platformには影響しませんでした。どこを変更したらよいですか?それ(プラットフォーム)は、コード化された文字列か、動的に作成されますか?
私はcasperjsを変更するか、PhantomJSの独自のバージョンを構築する代わりにいくつかのメソッドを上書きすることを提案します。おそらくあなたのGoogleグループであなたの質問をする運がもっとありますhttps://groups.google.com/forum/#!forum/casperjs – CSchulz
ご意見ありがとうございます。私はそれをしました。 – Alex
おそらく答えとして回答を投稿することができます。 – CSchulz