2015-05-28 3 views
4

я использую PhantomJS с помощью Selenium WebDriver в Python, и я пытаюсь выполнить кусок JavaScript на странице в надежде на возвращение части данных:Выполнение Javascript на Selenium/PhantomJS

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) 

Однако при запуске он сообщает KeyError. Я не смог найти много документации по имеющимся командам, поэтому я немного застрял здесь.

ответ

7

метод, созданный для выполнения JavaScript называется execute_script(), не execute():

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

FYI, execute() используется внутри для отправки WebDriver команд.

Обратите внимание: если вы хотите что-то, возвращаемое кодом javascript, вам необходимо использовать return.

Также обратите внимание, что это может вызвать сообщение об ошибке Can't find variable: $. В этом случае найдите элемент с selenium и передайте его в сценарий:

# 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) 
Смежные вопросы