2011-10-29 38 views
1

基本上我想进入我的路由器的设置,
设置一个检查按钮,并在页面上调用一个函数,所有编程方式的
QWebKit - 运行页面的JavaScript函数?

我知道所有的javascript来做到这一点,
,可以通过谷歌Chrome控制台。

我可以通过QWebKit,
在句法上执行它,但实际页面不受影响。

import sys 
from PyQt4 import QtCore, QtGui, QtWebKit 

class Browser(QtWebKit.QWebView): 
    def __init__(self, parent = None): 
     super(Browser, self).__init__() 
     self.changepage() 

    def changepage(self): 
     self.load(QtCore.QUrl("http://192.168.0.1/adv_mac_filter.php")) 
     x1 = self.page().mainFrame() 
     x1.evaluateJavaScript("entry_enable_1.checked = true;") 
     x1.evaluateJavaScript("check();") 


app = QtGui.QApplication(sys.argv) 
x = Browser() 
x.show() 
sys.exit(app.exec_()) 

(是的,这个代码需要,我已经登录到我的路由器设置)
我知道的JavaScript正在运行,我可以使用警报测试。

但是,路由器的html“checked()”函数或复选框没有运行/更改。
这就像我实际上没有与页面交互,而是一个副本。

我在这里犯了一个大规模的菜鸟错误吗?


规格:
蟒蛇2.7
PyQt4的
QWebKit
的Windows 7

+0

页面中是否有表单或其他东西需要回发到服务器(即路由器)?任何类型的浏览器总是与本地的网页副本一起工作,所以有些东西需要通过HTTP(表单发布或一些AJAX方法)与服务器通信。大概是 – Pointy

+0

。我怀疑这样的事情,但不知道该怎么做! Chrome控制台让这一切看起来都如此简单! –

+0

完全取决于网页的工作方式。当您直接使用路由器时,是否有按钮需要点击,如“保存”或其他?如果您可以触发从Python中点击该元素,它可能会做正确的事情。 – Pointy

回答

0

你或许应该等待网页加载完成,通过移动的JavaScript评估连接到loadFinished()插槽信号。

但正如Pointy建议的,您也可以尝试通过QNetworkAccessManager自己发送POST请求,而不是使用小部件。

+0

我不知道如何去关于后者(前者没有工作)。我不确定我是否可以发布请求来按下按钮,或者我必须提交整个表单,但我不知道其中的任何一个! :D 有没有更简单的方法来做到这一点以外的Python? 只需在文件中使用JavaScript? –

+0

您可以打开Chrome开发者工具,点击网络标签,然后点击路由器页面上的复选框。如果当前有HTTP请求,它将显示在网络选项卡中,您可以单击它以获取请求参数和路由器响应。 – alexisdm

+0

更改复选框的状态不会导致HTTP请求。我尝试点击'保存'按钮(运行'check()'),这会提示一个HTTP请求,但我无法点击它,因为网络选项卡不是刷新的。 –