python - una - web scraping tutorial
Nombres de clase de compuesto de selenio no permitidos (2)
Llego tarde a esta pregunta. Pero también encontré una solución al tratar las clases compuestas como una cadena, usando tag_name y get_attribute (''clase''), cuando no está familiarizado con Xpath. Necesita algunas líneas de código más, pero es sencillo y apto para principiantes como yo.
elements = driver.find_elements_by_tag_name(''Tag Name Here'')
for element in elments:
className = watchingTable.get_attribute(''class'')
print(className)
if className == ''Your Needed Classname'':
#Do your things
Tengo el siguiente código que hace clic en un elemento para abrir una pantalla y copiar el texto en ella
el1 = driver.find_element_by_id("keyDev-A")
el1.click()
el2 = driver.find_element_by_class_name("content")
print(el2.text)
Sin embargo, cuando intenté hacer que el
selenium
haga clic en el botón dentro de esa ventana emergente con
el3 = driver.find_element(By.CLASS_NAME, "action-btn cancel alert-display")
el3.click()
Produce un mensaje de error:
invalid selector: Compound class names not permitted
Este es el HTML en el que estoy tratando de hacer que
selenium
haga clic.
El botón
Close
<div class="nav">
<span class="action-btn confirm prompt-display">Confirm</span>
<span class="action-btn cancel prompt-display">Cancel</span>
<span class="action-btn cancel alert-display">Close</span>
</div>
¿Cómo debo escribir
el3
para hacer clic en el botón Cerrar?
El comentario de Leon lleva a la información correcta de que los nombres de clase compuestos ya no son compatibles. Lo que podría hacer en su lugar es intentar usar los selectores css. En su caso, la siguiente línea de código debería ayudarlo a obtener el elemento que desea:
el3 = driver.find_element_by_css_selector(".action-btn.cancel.alert-display")
Encuentra el elemento con las tres clases (action-btn, cancel y alert-display) en el atributo de clase. Tenga en cuenta que el orden de las clases no importa aquí y cualquiera de las clases puede aparecer en cualquier parte del atributo de clase. Mientras el elemento tenga las tres clases, será seleccionado. Si desea que se arregle el orden de las clases, puede usar el siguiente xpath:
el3 = driver.find_element_by_xpath("//*[@class=''action-btn cancel alert-display'']")