Je voudrais simuler la propriété de la plate-forme Navigator de CasperJS (/ PhantomJS). J'ai trouvé les solutions faciles d'écraser l'objet Navigator à la charge de la page qui est proposée dans beaucoup d'autres endroits sur le web:Faux propriétés du navigateur
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);
});
});
Mais le problème est que si nous obtenons les propriétés du navigateur d'un Iframe, les valeurs sont encore celui d'origine car, la page.initialized ne le définit que pour la page principale. J'ai donc décidé de le changer dans son code source et de le reconstruire. J'ai téléchargé Phantomjs à partir du repo git, et j'ai cherché une valeur de plate-forme codée en dur (Linux x86_64 pour mon cas). J'ai trouvé la chaîne codée en dur dans ./phantomjs/src/qt/qtwebkit/Source/WebCore/platform/qt/UserAgentQt.cpp
Je l'ai changé en la chaîne que je voulais être retourné en tant que navigator.platform, mais cela n'affectait pas le navigator.platform. Où devrais-je le changer? Est-ce (plateforme) une chaîne codée ou est-elle créée dynamiquement?
Je suggère de changer casperjs ou remplacer certaines méthodes au lieu de construire une version propre de PhantomJS. Vous avez peut-être plus de chance de poser votre question dans leur groupe Google https://groups.google.com/forum/#!forum/casperjs – CSchulz
Merci pour votre commentaire. Je l'ai fait. – Alex
Peut-être que vous pouvez poster votre solution comme réponse. – CSchulz