在 Selenium/PhantomJS 上执行 Javascript
Executing Javascript on Selenium/PhantomJS
我在 Python 中通过 Selenium Webdriver 使用 PhantomJS
,我试图在页面上执行一段 JavaScript,希望返回一段数据:
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
。我找不到很多关于可用命令的文档,所以我有点卡在这里。
为执行javascript而创建的方法被称为execute_script()
,而不是execute()
:
driver.execute_script('return $("#list").DataTable().data();')
仅供参考,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)
我在 Python 中通过 Selenium Webdriver 使用 PhantomJS
,我试图在页面上执行一段 JavaScript,希望返回一段数据:
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
。我找不到很多关于可用命令的文档,所以我有点卡在这里。
为执行javascript而创建的方法被称为execute_script()
,而不是execute()
:
driver.execute_script('return $("#list").DataTable().data();')
仅供参考,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)