Cómo ejecutar JavaScript en Selenium Python, pasar y obtener valores desde él

Selenium es una biblioteca muy popular que se utiliza para probar interfaces o crear bots para sitios web. Aunque la mayor parte de la funcionalidad está disponible en métodos Python, a veces necesitamos ejecutar código JavaScript en una página. En este artículo, veremos cómo hacerlo.
Para ejecutar JavaScript en Selenium utilizando Python, puede utilizar el método execute_script(). Este método le permite ejecutar código JavaScript en el contexto de la página actual cargada en Selenium WebDriver. A continuación se muestra un ejemplo básico que ilustra cómo se puede utilizar:
from selenium import webdriver # Inicializa WebDriver. En este ejemplo, estoy usando ChromeDriver. driver = webdriver.Chrome('/path/to/chromedriver') # Abre una página web. driver.get('http://example.com') # Ejecutar un comando JavaScript. driver.execute_script("alert('Hello, World!');") # No olvides cerrar el controlador. driver.quit() Aquí, el método execute_script() se utiliza para mostrar una simple alerta JavaScript alert(), pero puede sustituir la cadena JavaScript por cualquier script que necesite ejecutarse.
Obtener datos de JS en Python
Para obtener datos de la instrucción return de JavaScript en Selenium con Python, puede utilizar el método execute_script() como antes, pero esta vez fije su valor de retorno. El método execute_script() devolverá lo que devuelva el código JavaScript. A continuación se muestra cómo puede hacerlo:
from selenium import webdriver # Inicializa el WebDriver. Aquí estoy usando ChromeDriver como ejemplo. driver = webdriver.Chrome('/path/to/chromedriver') # Abre una página web. driver.get('http://example.com') # Ejecuta un comando JavaScript y captura el valor devuelto. # Por ejemplo, obtener el título de la página utilizando JavaScript. title = driver.execute_script("return document.title;") # Imprime el resultado. print("El título de la página es:", título) # No olvides cerrar el controlador. driver.quit() Este ejemplo ejecuta JavaScript return document.title;, que devuelve el título de la página actual. A continuación, este valor se almacena en la variable Python title y se imprime.
Puede sustituir return document.title; por cualquier código JavaScript que devuelva datos, y el método devolverá esos datos a su script Python.
Pasar datos a JavaScript
Para pasar argumentos al método execute_script() en Selenium utilizando Python, puede incluirlos en la llamada al método después de la línea de código JavaScript.
Estos argumentos se pueden recuperar en su código JavaScript. En JS, utilice la variable arguments[index] para hacer referencia a los argumentos pasados, donde index es el índice del argumento (empezando por 0).
from selenium import webdriver # Inicializar el WebDriver. Aquí estoy usando ChromeDriver. driver = webdriver.Chrome('/path/to/chromedriver') # Abre una página web. driver.get('http://example.com') # Código JavaScript con argumentos js_code = "return arguments[0] + arguments[1];" # Pasar argumentos a execute_script result = driver.execute_script(js_code, 10, 20) # Imprimir el resultado. print("El resultado es:", resultado) # Cerrar el controlador driver.quit()En este ejemplo, el código JavaScript return arguments[0] + arguments[1]; suma dos números. Los números 10 y 20 se pasan como argumentos a execute_script(). A continuación, el código JavaScript devuelve la suma de estos números, que se almacena en la variable Python result y se envía a la consola.
Esto también se puede hacer insertando una variable en la propia línea de código JS, pero a veces esto causa problemas con las comillas y las cadenas, por lo que se debe probar esta opción.












