Я работаю во внутренней сети с вложенными фреймами и не могу получить доступ к дочернему фрейму.
Источник HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=windows-1252">
<title>VIS</title>
<link rel = "shortcut icon" href = "https://bbbbb/ma1/imagenes/iconos/favicon.ico">
</head>
<frameset rows = "51,*" frameborder = "no" scrolling = "no" border = "0">
<frame id = "cabecera" name = "cabecera" src = "./blablabla.html" scrolling = "no" border = "3">
<frameset id = "frame2" name = "frame2" cols = "180,*,0" frameborder = "no" border = "1">
<frame id = "menu" name = "menu" src = "./blablabla_files/Menu.html" marginwidth = "5" scrolling = "auto" frameborder = "3">
<a href = "/ma1/jsp/orD/queda.jsp" target = "contenido">Buscar</a>
<frame id = "contenido" name = "contenido" src = "./blablabla_files/saved_resource.html" marginwidth = "5" marginheight = "5">
<html>
<head>
<meta http-equiv = "Content-Type" content = "text/html; charset=windows-1252">
<title>BUSCAr</title>
</head>
<frameset name = "principal" rows = "220,*" frameborder = "NO">
<frame name = "Formulario" src = "./BusquedaSimple.html" scrolling = "AUTO" noresize = "noresize">
<input id = "year" name = "year" size = "4" maxlength = "4" value = "" onchange = "javascript:Orden();" onfocus = "this.value='2018';this.select();" type = "text">
<frame name = "Busqueda" src = "./saved_resource(2).html" scrolling = "AUTO">
</frameset>
<noframes>
<body>
<p>soporte a tramas.</p>
</body>
</noframes>
</html>
<frame name = "frameblank" marginwidth = "0" scrolling = "no" src = "./blablabla_files/saved_resource(1).html">
</frameset>
<noframes>
<P>Para ver esta página.</P>
</noframes>
</frameset>
</html>Я нахожу кнопку «Автобус» внутри фрейма «меню» с помощью:
driver.switch_to_default_content()
driver.switch_to_frame(driver.find_element_by_css_selector("html frameset frameset#frame2 frame#menu"))
btn_buscar = driver.find_element_by_css_selector("#div_menu > table:nth-child(10) > tbody > tr > td:nth-child(2) > span > a")
btn_buscar.click()Я пробовал этот код, чтобы найти входной id = "year" внутри frame = "Formulario":
driver.switch_to_default_content()
try: driver.switch_to_frame(driver.switch_to_frame(driver.find_element_by_css_selector("html frameset frameset#frame2 frame#contenido frameset#principal frame#Formulario")))
print("Ok cabecera -> contenido")
except:
print("cabecera not found")или же
driver.switch_to_frame(driver.switch_to_xpath("//*[@id='year"]"))но они не работают.
Вы можете помочь мне?
Спасибо!






Чтобы иметь возможность обрабатывать требуемый iframe, вам необходимо впоследствии переключиться на все
рамки предков:
driver.switch_to.frame("cabecera")
driver.switch_to.frame("menu")
btn_buscar = driver.find_element_by_link_text("Buscar")
btn_buscar.click()
Также обратите внимание, что в экземпляре Webdriver нет таких методов, как switch_to_xpath() и switch_to_frame(), методы switch_to_default_content() устарели, поэтому вам лучше использовать switch_to.frame(), switch_to.default_content()
Предполагая, что ваша программа сфокусирована на Контекст просмотра верхнего уровня, чтобы найти и кнопку с текстом как Автобус, вам нужно switch() через все родительские кадры вместе с WebDriverWait в сочетании с правильным expected_conditions, и вы можете использовать следующий блок кода:
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"cabecera"))
WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it(By.ID,"menu"))
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.LINK_TEXT, "Buscar"))).click()
Я попробовал оба варианта, но попасть в кнопку «Бускар» внутри рамки «меню» не удалось. Наконец, я решил загрузить <frame id = "contenido" name = "contenido" src = "./ blablabla_files / saved_resource.html" marginwidth = "5" marginheight = "5">, который загружает тот же результат, что и кнопка "Buscar". , потому что это фрейм, который загружает форму, и единственная часть, которая мне нужна. Спасибо!
Проверьте предоставленный образец кода HTML - он, похоже, не работает, поскольку у iframe нет закрывающих тегов ...