Sree
¿Cómo puedo filtrar elementos que tienen la misma clase?
<html>
<body>
<p class="content">Link1.</p>
</body>
</html>
<html>
<body>
<p class="content">Link2.</p>
</body>
</html>
Pequeño panda
Puede intentar obtener la lista de todos los elementos con class = "content"
mediante el uso buscar_elementos_por_nombre_de_clase:
a = driver.find_elements_by_class_name("content")
A continuación, puede hacer clic en el enlace que está buscando.
-
¿Devuelve todos los elementos de la clase o el primero encontrado?
– Keerthan Kumar
14 de mayo de 2018 a las 1:50
-
¿Por qué estás incluso inicializando?
a
como una lista vacía si la reasignas inmediatamente?– usuario124384
08/09/2018 a las 23:07
-
@keerthankumar esta lista de retorno de todos los elementos. Para obtener el primer uso
find_element_by_class_name
– zvi
8 de agosto de 2019 a las 7:10
-
No necesita el punto y coma al final de la línea de código de Python.
– campana de silo crudo
9 de julio de 2020 a las 0:02
-
find_element_by_*
yfind_elements_by_*
se eliminan en Selenium 4.3.0. Usarfind_element
en cambio. Mira todos los registros de cambios aquí.– Parampreet Rai
8 de julio a las 17:08
ZygD
Por.CLASS_NAME aún no se menciona:
from selenium.webdriver.common.by import By
driver.find_element(By.CLASS_NAME, "content")
Esta es la lista de atributos. que se pueden utilizar como localizadores en Por:
CLASS_NAME
CSS_SELECTOR
ID
LINK_TEXT
NAME
PARTIAL_LINK_TEXT
TAG_NAME
XPATH
-
Gracias esto funcionó para mí. La alternativa de usar find_element_by_class_name no funcionaría en absoluto para mí, incluso si usara una espera.
– sean le roy
22 de julio a las 15:54
-
Pero arroja una excepción si no existe (?). Por lo tanto, interrumpir la ejecución de la prueba.
-Peter Mortensen
hace 18 horas
selenio no detectado
Según el HTML:
<html>
<body>
<p class="content">Link1.</p>
</body>
<html>
<html>
<body>
<p class="content">Link2.</p>
</body>
<html>
dos (2) <p>
los elementos tienen la misma clase content
.
Entonces, para filtrar los elementos que tienen la misma clase, es decir content
y crear un lista puede utilizar cualquiera de las siguientes estrategias de localización:
-
Usando
class_name
:elements = driver.find_elements_by_class_name("content")
-
Usando
css_selector
:elements = driver.find_elements_by_css_selector(".content")
-
Usando
xpath
:elements = driver.find_elements_by_xpath("//*[@class="content"]")
Idealmente, para hacer clic en el elemento que necesita para inducir WebDriverWait para el visibility_of_all_elements_located()
y puedes usar cualquiera de los siguientes Estrategias de localización:
-
Usando
CLASS_NAME
:elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CLASS_NAME, "content")))
-
Usando
CSS_SELECTOR
:elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, ".content")))
-
Usando
XPATH
:elements = WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.XPATH, "//*[@class="content"]")))
-
Nota : Tienes que agregar las siguientes importaciones:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
Referencias
Puede encontrar un par de discusiones relevantes en:
- Cómo identificar un elemento a través del nombre de clase aunque haya varios elementos con los mismos nombres de clase usando Selenium y Python
- No se puede ubicar el elemento usando className en Selenium y Java
- ¿Cuáles son las propiedades de find_element_by_class_name en selenium python?
- Cómo ubicar el último elemento web usando el atributo de nombre de clase a través de Selenium y Python
-
Ni el nombre de la clase ni el selector css funcionaron, no tengo idea de por qué, pero xpath sí, muchas gracias por eso
– Temporizador
14 de enero de 2021 a las 10:01
-
De un comentario: “
find_element_by_*
yfind_elements_by_*
se eliminan en Selenium 4.3.0. Usarfind_element
en cambio.”-Peter Mortensen
hace 17 horas
Utilice nth-child, por ejemplo: http://www.w3schools.com/cssref/sel_nth-child.asp
driver.find_element(By.CSS_SELECTOR, 'p.content:nth-child(1)')
o http://www.w3schools.com/cssref/sel_firstchild.asp
driver.find_element(By.CSS_SELECTOR, 'p.content:first-child')
La forma más sencilla es utilizar find_element_by_class_name('class_name')
Pedro Mortensen
La primera respuesta ha quedado obsoleta y las otras respuestas solo devuelven un resultado. Esta es la respuesta correcta:
driver.find_elements(By.CLASS_NAME, "content")