es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Seleccione la primera opción seleccionada del campo select dentro de la celda de cuadrícula denominada inside td.

Estoy intentando extraer una tabla de un sitio web dinámico. Estoy utilizando Selenium para acceder a los datos correctos y luego usando BeautifulSoup para extraer la tabla, pero no puedo obtener los datos de las etiquetas select. Por ejemplo, una etiqueta select tiene dos opciones: Activo y Cancelado, pero al extraer esta etiqueta, los resultados muestran ambos textos, en lugar de eso solo quiero el texto seleccionado, como Activo o Cancelado. Aquí está el código HTML.

<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-html -->
<td _ngcontent-c3="" class="sticky_table_fourth_left_entry"><!-- --><!-- --><!-- --><!-- --><select _ngcontent-c3="" class="form-control status-select ng-untouched ng-pristine" disabled="" style="background-color: rgb(255, 96, 96);"><option _ngcontent-c3="" value="Active">Active</option><option _ngcontent-c3="" value="Cancelled">Cancelled</option></select><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --><!-- --></td>
<!-- end snippet -->

No hay ningún elemento web para el texto seleccionado, pero cuando voy al árbol de accesibilidad, el texto seleccionado está en un gridcell.

Aquí está la imagen:

Here is the image.

Después de hacer mucha investigación, todavía no puedo encontrar cómo extraer ese texto de gridcell, no sé si hay alguna manera de hacerlo, pero si la hay, por favor ayúdame aquí.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el texto seleccionado no es accesible directamente utilizando Selenium o BeautifulSoup. Sin embargo, puedes intentar usar la función WebDriverWait y ExpectedConditions para esperar hasta que el texto seleccionado sea visible en el árbol de accesibilidad antes de extraerlo.

    Primero, localiza el elemento gridcell que contiene el texto seleccionado utilizando su atributo class o cualquier otro identificador único. Luego, utiliza una combinación de WebDriverWait y ExpectedConditions para esperar hasta que el elemento se vuelva visible con un atributo innerText no vacío.

    Aquí hay un ejemplo de fragmento de código utilizando Python y Selenium WebDriver:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    
    # Localiza el elemento gridcell que contiene el texto seleccionado
    gridcell = driver.find_element_by_class_name('selected-gridcell')
    
    # Espera hasta que el texto seleccionado sea visible en el árbol de accesibilidad
    selected_text = WebDriverWait(driver, 10).until(
        EC.text_to_be_present_in_element(
            (By.CLASS_NAME, 'selected-gridcell'), ''
        )
    )
    
    # Extrae el texto seleccionado del elemento gridcell
    selected_text = gridcell.get_attribute('innerText')
    

    Sustituye driver con tu instancia del WebDriver, y selected-gridcell con el nombre de la clase o cualquier otro identificador único del elemento gridcell.

    Este código esperará hasta que el texto seleccionado sea visible en el árbol de accesibilidad, y luego lo extraerá del elemento gridcell utilizando su método get_attribute('innerText').

Comments are closed.