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.
Selenium executes the Javascript commands by taking the help of the execute_script method. The commands to be executed are passed as arguments to the method. Some operations like scrolling down in a page cannot be performed by Selenium methods directly. This is achieved with the help of the Javascript Executor.
PhantomJS And Selenium For Web Automation (Basic) Just like any other browsers with GUI interface (Firefox, IE, Chrome, etc.), for PhantomJS also, Selenium has a standard API to support the automation.
Being a headless browser, the interactions are much faster than the real browser. So the performance time is smoother in PhantomJS than in Selenium.
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)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With