Ответ 1
простой es6 адаптирован из h3manth:
document.querySelectorAll('iframe').forEach( item =>
console.log(item.contentWindow.document.body.querySelectorAll('a'))
)
Изменить: новый заголовок. Я ищу документ document.querySelector для элементов внутри iframe.
Я сделал довольно много Googling для ответа, и, наконец, я в тупике.
Я пытаюсь выполнить запрос внутри iframe. Я строю селектора строк, которые будут использоваться в Selenium, и обычно я просто проверяю элемент с Firebug и использую document.querySelectorAll( "theStringIBuid" );
Но он не работает с элементами внутри iframe. Я попробовал все ниже, чтобы получить элемент "radiobutton1" внутри iframe "страницы-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
Спасибо -
простой es6 адаптирован из h3manth:
document.querySelectorAll('iframe').forEach( item =>
console.log(item.contentWindow.document.body.querySelectorAll('a'))
)
Если исходный url страницы не находится в том же домене с содержимым iframe, javascript будет обрабатывать iframe как черный ящик, то есть он ничего не увидит внутри него.
Вот фрагмент кода для погружения в кадры одного и того же происхождения (т.е. совместимый с ES5):
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;
}
Это погружается как во фреймы, так и в фреймы. Это может даже пережить (хотя и не войти) рамки перекрестного происхождения.