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.

La función de desplazamiento de ventana de Selenium solo funciona en el modo de depuración, identificando el elemento Select mediante Selenium y Python.

Estoy extrayendo información de un sitio web de VUE.js y cuando tengo el modo de depuración activado en Selenium, puedo localizar y hacer clic en un botón desplegable, pero cuando lo ejecuto en modo normal, muestra el siguiente mensaje de error:

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted: Element <select id="sortselectbox" data-ph-at-id="search-page-sort-drop-down" class="form-control au-target" value.bind="searchParams.sortBy" change.delegate="sortfilterSearch()" tabindex="0" data-ph-id="ph-page-element-page20-4VGGDW" au-target-id="169">...</select> is not clickable at point (707, 444). Other element would receive the click: <div class="chatBotNotificationText" tabindex="0">...</div>
  (Session info: headless chrome=96.0.4664.110)

Aquí se muestra cómo encuentro el botón desplegable:

Order = driver.find_element_by_xpath("//*[@id='sortselectbox']")

Antes de eso, aquí se muestra cómo desplazo la página hacia la parte superior del sitio web para que el elemento sortselectbox sea visible para el controlador:

driver.execute_script("window.scrollTo(0, 220)") #Page up

Aquí se muestra el elemento HTML:

<select id="sortselect" data-ph-at-id="search-page-sort-drop-down" class="form-control au-target" value.bind="searchParams.sortBy" change.delegate="sortfilterSearch()" tabindex="0" data-ph-id="ph-page-element-page20-UCZFWs" au-target-id="150"> <option value="Most relevant" key="c-internal-digital-technology-it-53pxnB-ph-search-results-v2-view4-mostRelevantText" data-ph-id="ph-page-element-page20-srcQGN"> Most relevant </option> <option value="Most recent" key="c-internal-digital-technology-it-53pxnB-ph-search-results-v2-view4-mostRecentText" data-ph-id="ph-page-element-page20-Br2Xo6"> Most recent </option> </select>

He intentado agregar más tiempo de espera antes y después del desplazamiento, pero parece que falla en ese paso. Todos los indicios indican que el desplazamiento no funciona en modo normal. ¿Debería encontrar otra forma de localizar ese botón sortselectbox sin usar el script window.scrollTo?

¡Gracias!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema que estás enfrentando es que el botón desplegable está siendo interceptado por otro elemento en la página web. Este error es común cuando el elemento que estás intentando hacer clic no es interactivo debido a que está superpuesto por otro elemento en la página.

    Una posible solución para este problema podría ser esperar a que el elemento sea clickable antes de intentar hacer clic en él. Puedes utilizar la clase WebDriverWait proporcionada por Selenium para esperar a que el elemento sea clickable.

    Aquí tienes un ejemplo de cómo puedes usar WebDriverWait:

    from selenium.webdriver.common.by import By
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    
    Order = WebDriverWait(driver, 10).until(
        EC.element_to_be_clickable((By.XPATH, "//select[@id='sortselectbox']"))
    )
    Order.click()
    

    Este fragmento de código esperará hasta 10 segundos para que el elemento sortselectbox sea clickable antes de intentar hacer clic en él. Si el elemento aún no es clickable después de 10 segundos, se generará una TimeoutException.

    Puedes ajustar el valor del tiempo de espera (10 en este ejemplo) según tus necesidades.

    Vale la pena señalar que hacer scroll hasta el elemento utilizando window.scrollTo debería funcionar incluso en el modo normal. Si sigues experimentando problemas con el scroll en el modo normal, puede que quieras investigar más para ver si hay algún otro problema subyacente en tu script o entorno.

Comments are closed.