当前位置: 首页 > 知识库问答 >
问题:

使用Selenium访问嵌套IFRAME

彭衡
2023-03-14

我有以下HTML代码的网页:

我试过这个。WebDriverWait(驱动程序,10).Unilt(ec.frame_to_available_and_switch_to_it((by.css_selector,“iframe.iframetgr”)))WebDriverWait(驱动程序,10).Unilt(ec.frame_to_available_and_switch_to_it((by.name,“Busqueda”)))WebDriverWait(驱动程序,10).Unilt(ec.element_to_be_clickable((by.xpath,“//input[@value='Aceptar']

但是消息:过时元素引用:元素未附加到页面文档

<section class="text-center" style="padding: 0"> <!-- class="d-block d-sm-none" style="padding: 0 10px;" -->
<div style="z-index: 0;">
    <iframe class="embed-responsive-item iframeTGR" src="https://www.tesoreria.cl/portal/portlets/acceso_usuario/cognito/CognitoController.jpf?vr=MzAzM2NhNjM1OGMyMmFkMDRjNjUwMWYxZGM4YjUyOTRhZjhlLDIwMjAtMTAtMDlUMjA6MzQ6MTFaLDc5OTA3NzkwLHYydUIzUHM1YkpxV0RSanQ3NUV3ZEIzTStDUUhvbDN4LHIxMCxDbGF2ZVRyaWJ1dGFyaWE=" style="border-width: 0px !important; min-height: 600px !important; width: 100% !important;">
        <html>
            <head>
                <link href="/portal/resources/css/tesoreria.css" rel="stylesheet" type="text/css">
                <link href="/portal/resources/css/tgrWp.css" rel="stylesheet" type="text/css">
            </head>
            <body>
                <iframe src="redireccion.jsp?redireccion=r10" name="busqueda" id="id_busqueda" class="tgr_wp_id_busqueda" scrolling="auto" marginwidth="0" marginheight="0" hspace="0" vspace="0" frameborder="0">
                    <html lang="es"><head><link rel="stylesheet" href="/certificaWeb/resources/css/custom-theme/jquery-ui-1.10.4.custom.css">  
                        <link rel="stylesheet" href="/certificaWeb/resources/css/custom-theme/default.css">  
                        <link rel="stylesheet" href="/certificaWeb/resources/css/cssTGRlocal.css">
                                <title>
                                    Comprobantes de Pago
                                </title>
                                <meta name="modificado" content="29-08-2012 14:52, by mce">
                            </head>
                            <body marginwidth="0" marginheight="0">
                            
                           
                        
                            
                        <table align="center"> 
                          <tbody><tr> 
                            <td align="center"> <table class="tblAnchoMM tblForm"> 
                                <caption>
                                 Consulta Comprobante de pago 
                                </caption> 
                                <tbody><tr> 
                                  <td> <!--inicio tabla principal--> 
                                    <form action="/certificaWeb/comprobantes/pagos/doConsulta.do" method="post"> <br>        
                                     <br> 
                                    <table align="center" class="tblForm tblAnchoSS"> 
                                      <tbody><tr> 
                                        <th colspan="2"> Por favor ingresar el Rut del Contribuyente</th> 
                                      </tr> 
                                      <tr> 
                                        <td class="tblFormTxt" width="60%">Tipo de Contribuyente </td> 
                                        <td> <input type="hidden" name="wlw-select_key:{actionForm.tipo}OldValue" value="true">
                                        <select name="wlw-select_key:{actionForm.tipo}" id="tipoCont" accesskey="s" onchange="chTipo(this.value)">
                                        <option value="2">ROL</option>
                                        <option value="1" selected="">RUT</option></select></td> 
                                      </tr> 
                                      <tr id="tipoRol" style="display: none;"> 
                                        <td class="tblFormTxt">Comuna / Rol / SubRol </td> 
                                        <td><input type="text" name="{actionForm.rolComuna}" id="comuna" class="formularios" maxlength="3">
                                                        <input type="text" name="{actionForm.rolRol}" id="rol" class="formularios" maxlength="5">
                                                        <input type="text" name="{actionForm.rolSubrol}" id="subrol" class="formularios" maxlength="3"> </td> 
                                      </tr> 
                                      <tr id="tipoRut" style="display: block;"> 
                                        <td class="tblFormTxt">Rut </td>
                                     <td> 
                                             <input type="text" name="{actionForm.rut}" id="rut" maxlength="8" size="8" disabled="" readonly="" onkeyup="{solonumeros(this,this.value.charAt(this.value.length-1))}"> - <input type="text" name="{actionForm.dv}" id="dv" class="formularios" maxlength="1" size="1" disabled="" readonly="" style="width: 15px;">
                                          </td>       
                                      </tr> 
                                      <tr> 
                                        <td class="tblFormTxt">Numero de Formulario 
                                                        </td> 
                                        <td> <input type="text" name="{actionForm.formNum}" id="formulario" maxlength="5" onkeyup="{solonumeros(this,this.value.charAt(this.value.length-1))}"></td> 
                                      </tr> 
                                      <tr> 
                                        <td class="tblFormTxt">Folio de Formulario </td>
                                        <td> <input type="text" name="{actionForm.formFolio}" id="folio" maxlength="10" onkeyup="{solonumeros(this,this.value.charAt(this.value.length-1))}"></td> 
                                      </tr> 
                                      <tr> 
                                        <td class="tblFormTxt">Fecha desde <label style="color:#456789; font-size:70%;">(DD-MM-AAAA)</label></td>
                                       <td> <input type="text" name="{actionForm.formDesde}" id="formDesde" value="01-10-2020" maxlength="10" style="width: 80px; height: 20px;">
                                         <!--   <td> <input type="text" id="desde" name="L15" size="10"  class="classFecha2" align="middle" style="background:#cccccc" readonly>-->
                                        </td> 
                                       <!-- <td  class="tblFormTxt" width="37%" style="color:#456789; font-size:70%;">(aaaa-mm-dd)</td>-->
                                      </tr> 
                                      <tr> 
                                        <td class="tblFormTxt">Fecha hasta <label style="color:#456789; font-size:70%;">(DD-MM-AAAA)</label></td>  
                                          <td> <input type="text" name="{actionForm.formHasta}" id="formHasta" value="09-10-2020" maxlength="10" style="width: 80px; height: 20px;">
                                          <!--   <td> <input type="text" id="hasta" name="L15" size="10" class="classFecha2" align="middle" style="background:#cccccc" readonly> -->
                                        </td>
                                        <!-- <td  class="tblFormTxt" width="37%" style="color:#456789; font-size:70%;">(aaaa-mm-dd)</td>-->
                                      </tr> 
                                    </tbody></table> 
                                    <br> 
                                    <input type="hidden" name="rutContribuyente" id="rutContribuyente" value="79907790">
                                    <input type="hidden" name="dvContribuyente" id="dvContribuyente" value="6">
                        
                        
                        <!--<input type="hidden" name="almacenista"  id="almacenista" value="<!%=almacenista%>"> -->
                                    
                                    <div align="center"> <input type="submit" class="boton" value="Aceptar">   </div> 
                                    </form>
                                     </td> 
                                  <!--fin tabla principal--> 
                                </tr> 
                            </tbody></table></td> 
                          </tr> 
                        </tbody>
                    </table>    
                       
                    </body>
                    </html>
                </iframe>
            </body>
        </html>
    </iframe> <!-- https://www.tesoreria.cl/LoginPortalCognito/login?go=rpl6_w81 -->
</div>

共有1个答案

万喜
2023-03-14

要访问嵌套的iframe,您需要同时切换到iframes,以便访问输入元素。

使用webdriverwait()并等待frame_to_be_available_and_switch_to_it()

WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.CSS_SELECTOR,".embed-responsive-item.iframeTGR")))
WebDriverWait(driver,10).until(EC.frame_to_be_available_and_switch_to_it((By.ID,"id_busqueda")))
WebDriverWait(driver,10).until(EC.element_to_be_clickable((By.CSS_SELECTOR,"input[value='Aceptar']"))).click()

您需要导入以下库

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
 类似资料:
  • 问题内容: 我正在尝试使用angular.js,hammer.js和topcoat制作和移动webapp。 我在显示像这样的Json文件中的数据时遇到了一些麻烦: 我的js文件是这样的: 我的HTML文件是这样的: 我想显示所有专辑,并且如果我的用户选择特定的艺术家,我想过滤那些专辑。 这里的问题是如何在此嵌套json上进行选择。顺便说一句,artist.name显示正确。 第二个问题是,如何过滤

  • 我从foursquare收到了一个json形式的响应。我尝试访问对象的某些部分,但没有成功。如何访问对象的地址?这是我试过的代码。 以下是json响应的一个示例: 完整的回应可以在这里找到

  • 问题内容: 为什么以下SQL语句不起作用? 它产生此错误: 查询输入必须至少包含一个表或查询。 单个语句有效。 问题答案: Access SQL语句不会让您对以下其中一项使用子查询 按照Piotr的建议,切换到语句即可。 或者,您可以在语句中使用Access Domain Aggregate函数而不是子查询:

  • 假设我有几个这样的类: 我想迭代所有包含的子类(不是继承的),并获得嵌套对象树中所有字段的列表。但是,当我使用这样的反射代码时: 在“do somethine here”步骤中,我想访问myField的子字段,但在Field api中没有看到任何直接允许我这样做的内容。我试过: MyField.getDeclaringClass(). getDeclaredFields()- 和 MyField.

  • 问题内容: 不固定f1.png值时如何访问inval值。即文件名可以是任何东西,它不知道,所以我如何使用Java访问此JSON中各种文件的inval字段值? 问题答案: 请尝试以下代码, 希望它能解决您的问题

  • 我希望能够访问我的“根”属性或子集。所以我尝试这样做: 根属性 SdkProperties 因此,通过这种方式,我可以自动连接完整的,或者只自动连接类,具体取决于我需要为给定上下文访问什么。 然而,当我以这种方式配置它时,我会从Spring得到一个堆栈溢出: 如何支持此工作流?