Intento encontrar un elemento por nombre de clase. Lamentablemente, el nombre de la clase que tengo que seleccionar contiene guiones bajos dobles con un error "no existe ese elemento".

div-element para seleccionar:

<div class="result-list-entry__data">
...
</div>

Selección:

last_named_class = result.find_element_by_class_name('result-list-entry__data')

Resultado actual (error):

selenium.common.exceptions.NoSuchElementException: Mensaje: no existe ese elemento: No se puede encontrar el elemento: {"método": "selector css", "selector": ". result-list-entry__data"} (Información de sesión: chrome = 77.0. 3865.90)

¿Es posible escapar de los guiones bajos dobles?

3
nicdreifuss 4 oct. 2019 a las 21:53

5 respuestas

La mejor respuesta

Puede utilizar el enfoque sugerido anteriormente con dos contiene:

last_named_class = result.find_element_by_xpath("//div[contains(@class, 'result-list') and contains(@class, 'data')]"
0
fredo.r 4 oct. 2019 a las 19:51

Puede intentar obtener la lista de todos los elementos con class = "result-list-entry__data" utilizando

Si tiene más de una clase en el DOM, repita la matriz elementResult en función de la posición

 elementResult=[];
 elementResult = driver.find_elements_by_class_name("result-list-entry__data");

Más

elementResult = driver.find_elements_by_class_name("result-list-entry__data");
1
stacktome 4 oct. 2019 a las 19:17

En primer lugar, verifique si hay iframes. si el elemento está en iframe, deberá cambiar al marco antes de hacer algo con ese elemento.

Puede ubicar este elemento usando una coincidencia parcial de cadena en el atributo de clase, algo como esto,

last_named_class = result.find_element_by_xpath("//*[contains(@class,'result-list-entry')]")
1
Sureshmani 4 oct. 2019 a las 19:06

Prueba debajo de las cosas,

  1. Aplicar la espera requerida (espera implícita o explícita)
    driver.implicitly_wait(15)
wait = WebDriverWait(driver, 10)
wait.until(ec.visibility_of_element_located((By.XPATH, "//*[contains(@class,'result-list-entry')]")))
  1. Compruebe si element es un elemento secundario del elemento iframe. si es así, cambie a iframe e intente hacer clic

  2. Utilice xpath con contiene si el valor de la propiedad del elemento cambia con frecuencia

    last_named_class = result.find_element_by_xpath("//*[contains(@class,'result-list-entry')]")
0
Yosuva A 4 oct. 2019 a las 20:11

Tal vez podría usar una consulta contiene en su selector. Intenta algo como esto:

last_named_class = result.find_element_by_xpath("//div[contains(@class, 'result-list')]")

Espero que esto ayude un poco.

1
Christine 4 oct. 2019 a las 19:05
58241823