Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

355
Vistas
Intentando obtener el siguiente elemento (texto) sin etiqueta de clase, etc.

Aquí está el código html de la página que estoy tratando de analizar. (Es una librería) Parte del código de la página

 <tr><tr> <tr><tr> <tr><tr> <tr><tr> <tr><tr> <tr> <td width="300" class="highlight"> <b>Издатель:</b> Додо Пресс,Фантом Пресс </td> </tr> <tr><tr> <tr><tr> <tr><tr>

Necesito obtener el texto que sigue

<b>Издатель:</b> (traducción - Editor)

Primero usé nextsibling de BeautifulSoup, funcionó bien, pero en las páginas de otros libros en el mismo sitio, el elemento del editor no siempre está en el mismo lugar, lo que significa que mi cadena de próximos hermanos no obtiene la parte correcta de la descripción del libro.

Traté de localizar el texto exacto 'Издатель:' con Selenium

 pubs = driver.find_element(By.XPATH, "//*[text()='Издатель:']")

e hizo el trabajo. Recibí el texto 'Издатель:'. Después de eso, traté de ubicar el siguiente elemento después de 'Издатель:' porque el texto que necesito siempre se encuentra después de 'Издатель:'.

la followingsibling forma de hermano Selenium no funciona porque el nombre de los editores no tiene clase o etiqueta, etc.

También intenté ejecutar JS

 pubs = driver.find_element(By.XPATH, "//*[text()='Издатель:']") pub = driver.execute_script(""" return arguments[0].nextElement""", pubs)
 pub = driver.execute_script("return document.evaluate('// [text()='Издатель:']/following-sibling::text()[1]'), document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue.textContent;")

Tampoco funcionó.

El elemento del editor no tiene ningún elemento hermano o hijo, por lo que no sé cómo obtener el texto que lo sigue.

URL del sitio: https://www.bgshop.ru/Catalog/GetFullDescription?id=10652263&type=1

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El texto Додо Пресс, Фантом Пресс está dentro de un nodo de texto , por lo que debe usar execute_script() induciendo a WebDriverWait para element_to_be_clickable() y puede usar cualquiera de las siguientes estrategias de localización :

  • Bloque de código:

     driver.get("https://www.bgshop.ru/Catalog/GetFullDescription?id=10652263&type=1") WebDriverWait(driver, 5).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.collapsed"))).click() print(driver.execute_script('return arguments[0].lastChild.textContent;', WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//*[text()='Издатель:']//ancestor::td[1]")))).strip()) driver.quit()
  • Salida de la consola:

     Додо Пресс,Фантом Пресс

Referencias

Puede encontrar un par de discusiones detalladas relevantes en:

  • ¿Cómo extraer solo el número de html?
  • Cómo extraer texto de los elementos del controlador web encontrados a través de xpath usando Selenium y Python
  • ¿Cómo uso selenio para extraer texto de un nodo de texto dentro de una clase a través de Python?
about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede lograr esto con el código javascript a continuación. Puede seleccionar cada elemento b y luego obtener su elemento principal y acceder a la propiedad innerText

 document.querySelectorAll('b').forEach( element => { console.log(element.parentElement.innerText) })
 <table> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Publisher:</b> name 1 </td> </tr> <tr></tr> <tr></tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Publisher:</b> name 2 </td> </tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Publisher:</b> name 3 </td> </tr> </table>

Si hay otras etiquetas b , puede verificar con la declaración si el contenido de b es el editor que se encuentra a continuación.

 document.querySelectorAll('b').forEach( element => { if(element.innerText == 'Publisher:'){ console.log(element.parentElement.innerText); } })
 <table> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Publisher:</b> name 1 </td> </tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Date:</b> Date 1 </td> </tr> <tr></tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Publisher:</b> name 2 </td> </tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr></tr> <tr> <td width="300" class="highlight"> <b>Publisher:</b> name 3 </td> </tr> </table>

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda