Modifier: nouveau titre. Ce que je recherche, c'est un document.querySelector pour les éléments à l'intérieur d'un iframe.
J'ai fait pas mal de recherches sur Google pour une réponse et finalement je suis perplexe.
J'essaie d'interroger à l'intérieur d'un iframe. Je construis des sélecteurs de chaînes à utiliser dans Selenium et généralement j'inspecte simplement l'élément avec Firebug et j'utilise document.querySelectorAll ("theStringIBuid");
Mais cela ne fonctionne pas avec les éléments à l'intérieur des iframes. J'ai essayé tout ce qui suit pour obtenir un élément "radiobutton1" à l'intérieur de l'iframe "page-iframe".
var elem1 = ".page-iframe";
console.log(elem1);
var elem2 = ".radiobutton1";
console.log(elem2);
document.querySelectorAll(elem1+elem2+"");
document.querySelectorAll('.page-iframe').contentWindow.document.body.querySelectorAll('.radiobutton1')
document.getElementById('.page-iframe').contentWindow.document.body.innerHTML;
[].forEach.call( document.querySelectorAll('.page-iframe'),
function fn(elem){
console.log(elem.contentWindow.document.body.querySelectorAll('.radiobutton1')); });
var contentWindow = document.getElementById('.page-iframe').contentWindow
var contentWindow = document.querySelectorAll('.page-iframe')
var contentWindow = document.querySelectorAll('.page-iframe')[0].contentWindow
Merci-
es6 simple adapté de h3manth :
document.querySelectorAll('iframe').forEach( item =>
console.log(item.contentWindow.document.body.querySelectorAll('a'))
)
si l'url de la page d'origine n'est pas dans le même domaine que le contenu iframe, le javascript traitera l'iframe comme une boîte noire, ce qui signifie qu'il ne verra rien à l'intérieur.
Voici un extrait pour plonger dans des cadres de même origine (c'est-à-dire ES5 compatible):
function findInFramesRec(selector, doc) {
var hit = doc.querySelector(selector);
if (hit) return hit;
var frames = Array.prototype.slice.call(doc.frames);
for(var i = 0; (i < frames.length) && !hit ; i++) {
try {
if (!frames[i] || !frames[i].document) continue;
hit = findInFramesRec(selector, frames[i].document);
} catch(e) {}
}
return hit;
}
Cela plonge à la fois dans les cadres de frameset et dans les iframes. Il peut même survivre (mais pas entrer) aux images d'origine croisées.