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!
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
: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á unaTimeoutException
.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.