User Tools

Site Tools


informatica:linux:selenium

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
informatica:linux:selenium [2019/09/24 07:20] – [Python firefox headless local] javiinformatica:linux:selenium [2022/12/27 09:08] (current) jose
Line 316: Line 316:
 o.click() o.click()
 </code> </code>
 +
 +
 +====== Padres e hijos ======
 +
 +Tenemos el siguiente código:
 +<code>
 +<div class="floatingWindowDiv" style="position: absolute; z-index: 1001; width: 222px; visibility: visible; top: 444px; display: block; left: 678px;">
 +  <div style="display: block; z-index: 400; position: static; width: 222px; left: 0px; top: 0px;" tabindex="-1">
 +    <div style="display: none;" class="masterMenu DropDownLoading">
 +      <span>Please Wait</span></div>
 +      <div class="masterMenu DropDownValueList" tabindex="-1" style="display: block; height: 150px;" loadingcompleted="true">
 +        <div tabindex="-1" class="masterMenuItem promptMenuOption" title="(All Column Values)" style="">
 +          <div class="promptDropdownNoBorderDiv">
 +            <input name="saw_263580_c_1" class="checkboxRadioButton" value="*)nqgtac(*" id="saw_263580_c_1_ck0" aria-labelledby="saw_263580_c_1_ck0_cblabel" tabindex="-1" style="" type="checkbox">
 +            <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck0" id="saw_263580_c_1_ck0_cblabel">(All Column Values)</label>
 +          </div>
 +        </div>
 +        <div tabindex="-1" class="masterMenuItem promptMenuOption" title="NULL">
 +          <div class="promptDropdownNoBorderDiv">
 +            <input name="saw_263580_c_1" class="checkboxRadioButton" value="*)nqgtn(*" id="saw_263580_c_1_ck1" aria-labelledby="saw_263580_c_1_ck1_cblabel" tabindex="-1" type="checkbox">
 +            <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck1" id="saw_263580_c_1_ck1_cblabel" style="">NULL</label>
 +          </div>
 +        </div>
 +        <div tabindex="-1" class="masterMenuItem promptMenuOption" title="AMA DE CASA">
 +          <div class="promptDropdownNoBorderDiv">
 +            <input name="saw_263580_c_1" class="checkboxRadioButton" value="AMA DE CASA" id="saw_263580_c_1_ck2" aria-labelledby="saw_263580_c_1_ck2_cblabel" tabindex="-1" style="" type="checkbox">
 +            <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck2" id="saw_263580_c_1_ck2_cblabel">AMA DE CASA</label>
 +          </div>
 +        </div>
 +        <div tabindex="-1" class="masterMenuItem promptMenuOption" title="AUTONOMO CUENTA">
 +          <div class="promptDropdownNoBorderDiv">
 +            <input name="saw_263580_c_1" class="checkboxRadioButton" value="AUTONOMO CUENTA" id="saw_263580_c_1_ck3" aria-labelledby="saw_263580_c_1_ck3_cblabel" tabindex="-1" style="" type="checkbox">
 +            <label class="checkboxRadioButtonLabel" for="saw_263580_c_1_ck3" id="saw_263580_c_1_ck3_cblabel">AUTONOMO CUENTA</label>
 +          </div>
 +        </div>
 +      </div>
 +   </div>
 +</div>
 +</code>
 +{{:informatica:linux:padres_hijos.png|}}
 +
 +Queremos hacer click en el checkbox, que es un campo input (la caja verde), pero es dinámico y no tiene el identificador. El indentificador está dentro del div que tiene el texto en title que es la caja padre en rojo
 +{{:informatica:linux:padres_hijos2.png|}}
 +
 +Primero seleccionamos el bloque padre, buscando por div y title que queramos:
 +<code>
 +menu_click='NULL'
 +menu_click='AMA DE CASA'
 +menu_click='CUENTA AJENA FIJO'
 +
 +xpath='//div[@title="' + menu_click + '"]'
 +padre = driver.find_element_by_xpath(xpath)
 +</code>
 +Ahora dentro de esa caja, selecctionamos el input para hacer click
 +<code>
 +xpath2='.//input[@type="checkbox"]'
 +hijo = padre.find_element_by_xpath(xpath2)
 +hijo.click()
 +</code>
 +
 +Si a partir de un elemento queremos seleccionar el padre:\\
 +Seleccionamos el elemento:
 +  xpath='//label[text()="AMA DE CASA"]'
 +  obj = driver.find_element_by_xpath(xpath)
 +Y a partir de ese elemento el padre:
 +  padre=obj.find_element_by_xpath("./..")
 +
 +
 +====== Grabar el contenido de la web en un archivo ======
 +
 +===== Texto =====
 +
 +
 +https://stackoverflow.com/a/50420667/2695864
 +
 +En mi caso fue muy útil porque no fui capaz, ni con chrome ni con firefox, de obtener el xpath de un popup que al hacer click en cualquier parte se cerraba.
 +
 +<code>
 +html = driver.execute_script("return document.body.innerHTML;")
 +with open("login.html","w") as f:
 +    f.write(html)
 +</code>
 +
 +===== Captura de pantalla =====
 +
 +<code>
 +fichero = f"{datetime.datetime.now():%Y%m%d_%H%M%S}"
 +driver.set_window_size(1080,1800)
 +driver.save_screenshot("captura.png")
 +driver.save_screenshot("captura_" + fichero + ".png")
 +</code>
 +
informatica/linux/selenium.1569309615.txt.gz · Last modified: 2019/09/24 07:20 by javi