皮赛德.JavaScript.以纯文本或 html 的形式执行 js 和 get 结果
PySide. JavaScript. Execute js an get result as a pure text or html
想从页面获取日历数据,例如 http://www.dukascopy.com/swiss/english/marketwatch/calendars/eccalendar/数据是动态的,并使用js-applet加载 - "DukascopyApplet"我尝试以这种方式提取数据:
app = QApplication(sys.argv)
web = QWebView()
web.page().mainFrame().loadFinished.connect(print_content)
web.load(QUrl("http://www.dukascopy.com/swiss/english/marketwatch/calendars/eccalendar/"))
web.show()
frame = web.page().mainFrame()
print(frame.evaluateJavaScript("DukascopyApplet"))
sys.exit(app.exec_())
但它显示"没有"。我正在使用win7,Py3.3,pyside。
所以问题是如何获取加载页面上存在的 js 代码和/或小程序的结果?
由 PySide 文档决定 QWebFrame.evaluateJavaScript
,它...
使用此帧作为上下文计算 scriptSource 定义的 JavaScript,并返回上次执行的语句的结果。
Se 绝对应该从 JS 返回一些东西。
因此,了解为什么从该方法调用中获得None
的唯一方法是知道 JS 端"最后执行的语句"的实际值是多少。(作为旁注,JS端实际上可能返回了一个null
或undefined
值,该值将正确映射到Python,None
并打印为"None"。
我建议你首先尝试执行一个非常简单的Javascript片段,它返回一个你已知的常量硬编码值,看看它是否有效。如果问题仍然存在,我首先建议在那个非常简单的片段上解决它,并且只有在它起作用时,才继续使用真正的 Javascript 代码。
这个故事的教训是,调试应该从逐步减少问题开始,以便在某个时候问题消失,然后找出它再次出现的确切时刻。否则,你只是在与你甚至没有发现/看到的东西作斗争。
QWebFrame.evaluateJavaScript 可以做到这一点,但它的效果并不好。它并不总是返回正确的类型,我发现它在函数调用时总是返回 None。获取结果的一种方法是将返回的项设置为您有权访问的变量,然后对该变量再次调用 evaluateJavaScript。
frame.evaluateJavaScript("myVariable = getResult()")
result = frame.evaluateJavaScript("myVariable")
我刚刚看了"DukascopyApplet",它不是一个典型的数据类型。只有标准数据类型,如字符串、整数、浮点数、布尔值......可以转移或返回给 Python。您可能需要通过"杜高斯贝Applet"并找到所需的特定数据。另一件可能有帮助的事情是将 Python 对象附加到 JavaScript。然后,您可以在JavaScript中调用该python对象的插槽方法。
class MyCLass(object):
@QtCore.Slot(str)
def doSomething(self, info):
# do something with the string info here
frame.addToJavaScriptWindowObject("varName", MyClass)
frame.evaluateJavaScript("varName.doSomething(DukascopyApplet.params.height)")
web.settings().setAttribute(QtWebKit.QWebSettings.WebAttribute.DeveloperExtrasEnabled, True)
inspector = QtWebKit.QWebInspector()
inspector.setPage(web.page())
在浏览了杜高斯贝Applet之后,看起来那里没有任何有用的存储信息。查找数据可能很困难。
- Meteor:插入集合后如何执行JS
- 如何在Odoo 9中执行JS文件中的函数
- 匿名自执行js函数内部的全局变量在外部仍然可用
- NumericTextBox-当用户键入数字时执行JS计算.能做到吗
- 引导:响应式设计-当窗口大小从980px调整到979px时执行JS
- 对页面上的所有ID执行JS功能
- 从浏览器访问页面时执行js函数's后退按钮
- 源代码未完全执行.(JS)
- 在执行JS脚本后监视对DOM的更改
- 在表单同步提交后执行 js 吗?
- 在 ubuntu 14.04 VPS 上执行.js文件错误
- 从PHP插入时在MongoDB上执行JS
- 在将ajax内容应用到元素后执行js函数
- Windows Phone浏览器控件执行JS函数来替换src属性
- 到达新页面后执行js
- 用C#在Win 8.1 Chakra中执行JS的一个失败的最小例子
- 在sharepoint显示模板中执行JS
- 在Bootstrap popover内部执行JS
- 从引导程序popover内容内部执行js
- 顺序执行js