2013-01-07 9 views
1

我目前使用Python Webkit DOM Bindings以編程方式與網站進行交互,這對我很有用。pywebkitgtk:無頭+完整的DOM交互可能嗎?

唯一的問題是它堅持打開GTK窗口來顯示頁面。有人想出了一種方法來防止它打開窗戶嗎?即使用它在無頭的方式?

我初始化這樣的觀點:

wv = pywebkitgtk.WebView(1024, 768, url=url) 
其中隱含打開GTK窗口

,然後我有一個onload事件處理程序操作DOM。

我首先想到子類化WebView,但這是不可能的,因爲它是一個編譯類。

還有其他想法嗎?

回答

0

你能得到一個GTK窗口的句柄,然後打電話給window.hide()?否則,你可能只需要使用完整的Webkit庫。

+0

不幸的是,我還沒有找到一種方法來獲得窗口句柄。 – rkrzr

1

我一直在使用PyQT。 PyQTWebView在Webkit上運行並且效果很好。查看Ghost.py以開始使用,或直接使用PyQT的API。運行完全沒有前景,並且支持Webkit的體面構建。

+0

我看了一下PyQt,但發現它不提供完整的DOM交互。它在[QWebElement](http://doc.qt.digia.com/qt/qwebelement.html)中有一個專有的DOM API,但是我不清楚你是否可以獲得例如'elem.offsetWidth',我需要。所以我更喜歡使用pywebkitgtk,因爲它實現了完整的DOM API。但是,如果這是不可能的,我可能會使用['evaluateJavasScript'](http://doc.qt.digia.com/qt/qwebelement.html#evaluateJavaScript)PyQT,但這似乎更像是一個黑客攻擊。 – rkrzr

0

創建一個窗口,並添加web視圖那裏,從來沒有顯示窗口..

我已經運行沒有向他們展示網頁視圖,並可以調用SHOW_ALL如果我需要向他們展示。

web_view = pywebkitgtk.WebView() 
window = gtk.Window(gtk.WINDOW_TOPLEVEL) 
sw = gtk.ScrolledWindow(hadjustment=None, vadjustment=None) 
sw.set_policy(gtk.POLICY_NEVER, gtk.POLICY_NEVER) 
sw.add(web_view) 
window.add(sw) 

#window.show_all() 
+0

我相信這隻適用於「標準」[pywebkitgtk](http://code.google.com/p/pywebkitgtk/),但不適用於[修補版本](http://www.gnu.org/software/pythonwebkit /),它包含完整的DOM綁定。至少如果我嘗試你的例子,我得到一個TypeError。如果您確實有權訪問DOM,我很樂意聽聽您是如何做到的。 – rkrzr

+0

你在哪裏得到錯誤?我沒有這臺機器上的pywebkitgtk。 –

+0

當調用'sw.add(web_view)'我得到'TypeError:Gtk.Container.add()參數1必須是gtk.Widget,而不是pywebkitgtk。WebView'。但正如我所說,我相信問題在於標準pywebkitgtk和帶有DOM綁定的修補版本之間的區別。如果我用標準的pywebkitgtk(即'import webkit'而不是'import pywebkitgtk')來測試你的代碼,它可以正常工作,但我沒有訪問DOM的權限。 – rkrzr

2

我是開發人員負責pythonwebkit,並且我有很多涵蓋這些領域的專業知識跨越多個平臺。實際上,你確實需要一個完全「無頭」的WebKit端口。在pythonwebkit中,實際上不應該太難,因爲只有三個「入口點」函數(一個用於窗口,一個用於文檔,另一個用於XMLHTTPRequest)。

真的,有人應該做一個適當的「完全無頭」的WebKit端口。已經有一個示例程序在WebKit的源代碼樹中非常接近,也許這會讓你開始。

相關問題