Puis-je obtenir de la page d'origine de la source (vs DOM actuel) avec phantomjs/casperjs?

J'essaie d'obtenir la source d'origine pour une page web particulière.

La page exécute des scripts qui modifient les DOM dès son chargement. Je voudrais obtenir le code source avant de script ou de modifications de l'utilisateur n'importe quel objet dans le document.

Avec Chrome ou Firefox (et probablement la plupart des navigateurs) je peux soit regarder les DOM (utilitaire de débogage F12) ou de regarder la source d'origine (clic droit, afficher la source). Ce dernier est ce que je veux accomplir.

Est-il possible de faire cela avec phantomjs/casperjs?

Avant d'arriver à la page que j'ai pour vous connecter. Cela fonctionne bien avec casperjs.
Si j'accédez à la page et rendre les résultats, je sais que je suis sur la page de droite.

casper.thenOpen('http://'+customUrl, function(response) {
    this.page.render('example.png'); //*** Renders correct page (current DOM) ***
    console.log(this.page.content); //*** Gets current DOM ***
    casper.download('view-source:'+customUrl, 'b.html', 'GET'); //*** Blank page ***
    console.log(this.getHTML()); //*** Gets current DOM ***
    this.debugPage(); //*** Gets current DOM ***
    utils.dump(response); //*** No BODY ***
    casper.download('http://'+customUrl, 'a.html', 'GET');  //*** Not logged in ?! ***
});

J'ai essayé this.download(url, 'a.html') mais il ne semble pas partager le même contexte, puisqu'il revient HTML comme si je n'étais pas connecté, même si je cours avec des cookies casperjs test.casper.js --cookies-file=cookies.txt.

Je crois que je devrais continuer à l'analyse de cette option.


J'ai aussi essayé de casper.open('view-source:url') au lieu de casper.open('http://url') mais il semble qu'il ne reconnaît pas l'url depuis que j'ai juste une page blanche.

J'ai regardé le raw de la Réponse HTTP-je obtenir à partir du serveur avec un utilitaire que j'ai et le corps de ce message (qui est en HTML), c'est ce dont j'ai besoin mais quand le chargement de la page dans le navigateur, le DOM a déjà été modifié.

J'ai essayé:

casper.thenOpen('http://'+url, function(response) {
    ...
}

Mais la response objet contient uniquement les en-têtes et quelques autres informations, mais pas le corps.


J'ai aussi essayé avec l'événement onResourceRequested.

L'idée est d'interrompre le téléchargement de toutes les ressources nécessaires à une page web spécifique (referer).

onResourceRequested: function(casperObj, requestData, networkRequest) {
for (var i=0; i < requestData.headers.length; i++) {
    var obj = requestData.headers[i];
    if (obj.name === "Referer" && obj.value === 'http://'+customUrl) {
        networkRequest.abort();
        break;
    }
}

Malheureusement le script qui modifie le DOM qui semble d'abord pour être en ligne la page HTML principale (ou de ce code n'est pas de faire ce que je voudrais faire).


¿Des idées?

Voici le code complet:

phantom.casperTest = true;
phantom.cookiesEnabled = true;
var utils = require('utils');
var casper = require('casper').create({
clientScripts:  [],
pageSettings: {
loadImages:  false,
loadPlugins: false,
javascriptEnabled: true,
webSecurityEnabled: false
},
logLevel: "error",
verbose: true
});
casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X)');
casper.start('http://www.xxxxxxx.xxx/login');
casper.waitForSelector('input#login',
function() {
this.evaluate(function(customLogin, customPassword) {
document.getElementById("login").value = customLogin;
document.getElementById("password").value = customPassword;
document.getElementById("button").click();
}, {
"customLogin": customLogin,
"customPassword": customPassword
});
},
function() {
console.log('Can't login.');
},
15000
);
casper.waitForSelector('div#home',
function() {
console.log('Login successfull.');
},
function() {
console.log('Login failed.');
},
15000
);
casper.thenOpen('http://'+customUrl, function(response) {
this.page.render('example.png'); //*** Renders correct page (current DOM) ***
console.log(this.page.content); //*** Gets current DOM ***
casper.download('view-source:'+customUrl, 'b.html', 'GET'); //*** Blank page ***
console.log(this.getHTML()); //*** Gets current DOM ***
this.debugPage(); //*** Gets current DOM ***
utils.dump(response); //*** No BODY ***
casper.download('http://'+customUrl, 'a.html', 'GET');  //*** Not logged in ?! ***
});

OriginalL'auteur supercoco | 2014-06-05