在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)

本文地址:https://www.itbaoku.cn/post/1739996.html