2011-10-29 7 views
1

基本的に私はルータの設定に行きたいと思っています。
はチェックボタンを設定し、ページ上の機能を呼び出すのは
です。QWebKit - ページのjavascript機能を実行しますか?

これを行うためのすべての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

+0

ページに、サーバ(つまりルータ)にPOSTバックする必要があるフォームまたは何かがありますか。あらゆる種類のブラウザは、常にWebページのローカルコピーを扱っているので、フォームポストかAJAXメソッドのどちらかをHTTP経由でサーバに返す必要があります。おそらく、 – Pointy

+0

私はこれのようなものを疑ったが、それをどうやって行うのか分からなかった! Chrome搭載のコンソールで簡単に見えるようになりました。 –

+0

それはページの仕組みによってまったく異なります。 「保存」などのように、ルータを直接使用しているときにクリックする必要があるボタンはありますか?その要素をPythonからクリックすると、それが正しいことになるかもしれません。 – Pointy

答えて

0

おそらくloadFinished()に接続されたスロットにjavascriptの評価を移動することで、ページの読み込みが終了するまで待機する必要があり信号。

でもPointyが示唆しているように、ウィジェットを使用する代わりにQNetworkAccessManagerを通して自分でPOSTリクエストを送信することもできます。

+0

私は後者についてどう考えていません(前者は動作しませんでした)。私はただボタンを押す要求を投稿できるのか、フォーム全体を提出しなければならないのか分かりません。私はそれを知らないのです! :D これをPythonの外で行う簡単な方法はありますか? ファイル内のJavaScriptを使用するだけですか? –

+0

クロム開発ツールを開き、ネットワークタブをクリックして、ルーターページのチェックボックスをクリックします。 HTTP要求がある場合、その時点で「ネットワーク」タブに表示されます。このボタンをクリックすると、要求パラメータとルータ応答が得られます。 – alexisdm

+0

チェックボックスの状態を変更しても、HTTP要求は発生しません。 HTTPリクエストを促す「保存」ボタン(「チェック()」)をクリックしようとしましたが、「ネットワーク」タブがリフレッシュされているため、クリックできません。 –

関連する問題