1

基本上我想进入我的路由器设置,
设置一个检查按钮,然后在页面上调用一个函数,
所有这些都是以编程方式进行的。

我知道执行此操作的所有 javascript,
并且可以通过 Google 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()”函数或复选框不会运行/更改。
就像我实际上并没有与页面交互,而是与副本交互。

我在这里犯了一个严重的新手错误吗?


规格:
python 2.7
PyQt4
QWebKit
Windows 7

4

1 回答 1

0

您可能应该等待页面完成加载,方法是将 javascript 评估移动到连接到loadFinished()信号的插槽。

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

于 2011-10-29T23:13:01.680 回答