Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

353
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!