Stack Overflow is a community of 4.7 million programmers, just like you, helping each other.

Join them; it only takes a minute:

Sign up
Join the Stack Overflow community to:
  1. Ask programming questions
  2. Answer and help your peers
  3. Get recognized for your expertise

I'm using PhantomJS via Selenium Webdriver in Python and I'm trying to execute a piece of JavaScript on the page in hopes of returning a piece of data:

from selenium import webdriver

driver = webdriver.PhantomJS("phantomjs.cmd") # or add to your PATH
driver.set_window_size(1024, 768) # optional
driver.get('http://google.com') # EXAMPLE, not actual URL

driver.save_screenshot('screen.png') # save a screenshot to disk
jsres = driver.execute('$("#list").DataTable().data()')
print(jsres)

However when run, it reports KeyError. I was unable to find much documentation on the commands available, so I'm a bit stuck here.

share|improve this question
up vote 3 down vote accepted

The method created for executing javascript is called execute_script(), not execute():

driver.execute_script('return $("#list").DataTable().data();')

FYI, execute() is used internally for sending webdriver commands.

Note that if you want something returned by javascript code, you need to use return.

Also note that this can throw Can't find variable: $ error message. In this case, locate the element with selenium and pass it into the script:

# explicitly wait for the element to become present
wait = WebDriverWait(driver, 10)
element = wait.until(EC.presence_of_element_located((By.ID, "list")))

# pass the found element into the script
jsres = driver.execute_script('return arguments[0].DataTable().data();', element)
print(jsres)
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.