2011-10-29 37 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請求,但我無法點擊它,因爲網絡選項卡不是刷新的。 –