Ejecutando javascript en Selenium usando Python

89

Soy totalmente nuevo en Selenium. Quiero ejecutar un fragmento de JavaScript en el siguiente código (como se comenta en el código), pero no puedo hacerlo. Por favor ayuda.

from selenium import webdriver
import selenium
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time

patch = raw_input("Enter patch number\n")
rel = raw_input("Enter release\n")
plat = raw_input("Enter port\n")

browser = webdriver.Firefox()

browser.get("xxxxxxxxxxxxxxxxx")

pdtfamily = browser.find_element_by_id("prodFamilyID")
pdtfamily.send_keys("Database & Tools" + Keys.TAB)
time.sleep(5)

pdt = browser.find_element_by_id("productID")
pdt.send_keys("Intelligent Agent" + Keys.TAB)
time.sleep(5)

pdt1 = browser.find_element_by_id("patchCacheChkBxID")
pdt1.send_keys(Keys.SPACE)
time.sleep(5)

pdt7 =  browser.find_element_by_id("M__Idf")
pdt7.send_keys(plat)

pdt8 =  browser.find_element_by_id("M__Idg")
pdt8.send_keys("American English")

# Here I want to execute this javascript - "submitForm('patchCacheAdd',1,{'event':'ok'});return false"

browser.close()

Si uso -

selenium.GetEval("submitForm('patchCacheAdd',1,{'event':'ok'});return false")

se equivoca como -

AttributeError: 'module' object has no attribute 'GetEval'I 
lo mas duro
fuente

Respuestas:

123

Prueba en browser.execute_scriptlugar de selenium.GetEval.

Vea esta respuesta por ejemplo.

Petr Viktorin
fuente
62

Utilice execute_script, aquí hay un ejemplo de Python:

from selenium import webdriver
driver = webdriver.Firefox()
driver.get("http://stackoverflow.com/questions/7794087/running-javascript-in-selenium-using-python") 
driver.execute_script("document.getElementsByClassName('comment-user')[0].click()")
Pedro Lobito
fuente
7

Si se mueve de iframes, puede perderse en su página, la mejor manera de ejecutar jquery sin problemas (con selenimum / python / gecko):

# 1) Get back to the main body page
driver.switch_to.default_content()

# 2) Download jquery lib file to your current folder manually & set path here
with open('./_lib/jquery-3.3.1.min.js', 'r') as jquery_js: 
    # 3) Read the jquery from a file
    jquery = jquery_js.read() 
    # 4) Load jquery lib
    driver.execute_script(jquery)
    # 5) Execute your command 
    driver.execute_script('$("#myId").click()')
Thomas LeBlond
fuente