Python pywebkitgtk:无头+完整DOM交互可能吗?

Python pywebkitgtk:无头+完整DOM交互可能吗?,python,webkit,gtk,Python,Webkit,Gtk,我目前正在使用以编程方式与网站交互,这对我来说很有用 唯一的问题是它坚持打开一个GTK窗口来显示页面。有人想出办法阻止它打开窗户吗?即以无头的方式使用它 我正在初始化视图,如下所示: wv = pywebkitgtk.WebView(1024, 768, url=url) 它隐式地打开GTK窗口,然后我有一个onload事件处理程序来操作DOM 我首先想到了WebView的子类化,但这是不可能的,因为它是一个编译类 还有其他想法吗?你能找到GTK窗口的句柄,然后调用window.hid

我目前正在使用以编程方式与网站交互,这对我来说很有用

唯一的问题是它坚持打开一个GTK窗口来显示页面。有人想出办法阻止它打开窗户吗?即以无头的方式使用它

我正在初始化视图,如下所示:

    wv = pywebkitgtk.WebView(1024, 768, url=url)
它隐式地打开GTK窗口,然后我有一个onload事件处理程序来操作DOM

我首先想到了WebView的子类化,但这是不可能的,因为它是一个编译类


还有其他想法吗?

你能找到GTK窗口的句柄,然后调用window.hide吗?否则,您可能只需要使用完整的Webkit库。

能否获得GTK窗口的句柄,然后调用window.hide?否则,您可能只需要使用完整的Webkit库。

我一直在使用PyQT。PyQTWebView在Webkit上运行,效果非常好。查看以开始,或者直接使用PyQT的API。完全无头运行,并支持最新版本的Webkit。

我一直在使用PyQT。PyQTWebView在Webkit上运行,效果非常好。查看以开始,或者直接使用PyQT的API。完全无头运行,并支持最新版本的Webkit。

创建一个窗口并将webview添加到该窗口中,并且从不显示该窗口

我的网络视图运行时没有显示它们,如果需要显示它们,可以调用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()

创建一个窗口并将webview添加到其中,但不要显示该窗口

我的网络视图运行时没有显示它们,如果需要显示它们,可以调用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()

您可以尝试使用Xvfb。我喜欢使用命令行并手动设置显示,但如果您不喜欢,可以使用以下命令:

您可以尝试使用Xvfb。我喜欢使用命令行并手动设置显示,但如果您不喜欢,可以使用以下命令行:

我是pythonwebkit的开发人员,我在多个平台上拥有丰富的专业知识,涵盖这些领域。实际上,您真的非常想要一个完全无头的WebKit端口。在pythonwebkit中,这其实并不难做到,因为只有三个入口点函数,一个用于窗口,一个用于文档,一个用于XMLHTTPRequest


真的,有人应该做一个合适的完全无头的WebKit端口。在WebKit的源代码树中已经有一个非常接近的示例程序,也许这会让您开始学习。

我是pythonwebkit的开发人员,我在多个平台上拥有丰富的专业知识,涵盖这些领域。实际上,您真的非常想要一个完全无头的WebKit端口。在pythonwebkit中,这其实并不难做到,因为只有三个入口点函数,一个用于窗口,一个用于文档,一个用于XMLHTTPRequest


真的,有人应该做一个合适的完全无头的WebKit端口。在WebKit的源代码树中已经有一个非常接近的示例程序,也许这会让您开始学习。

我查看了PyQt,但遗憾的是,它没有提供完整的DOM交互。它在中有一个专有的DOM API,但我不清楚您是否可以获得我需要的例如elem.offsetWidth。所以我更喜欢使用PyWebKittk,因为它实现了完整的DOM API。但如果这不可能,我可能会将PyQT与一起使用,但这似乎更像是一种黑客行为。我查看了PyQT,但不幸的是,它没有提供完整的DOM交互。它在中有一个专有的DOM API,但我不清楚您是否可以获得我需要的例如elem.offsetWidth。所以我更喜欢使用PyWebKittk,因为它实现了完整的DOM API。但如果这不可能,我可能会将PyQT与一起使用,但这更像是一种黑客行为。不幸的是,我没有找到获取窗口句柄的方法。不幸的是,我没有找到获取窗口句柄的方法。我相信这只适用于标准,而不适用于包含完整DOM绑定的。至少如果我试一下你的例子,我会得到一个打字错误。如果你有访问DOM的权限,我很想知道你是如何做到的。你从哪里得到错误的?我在此计算机上没有pywebkitgtk。调用sw.addweb_视图时,我得到TypeError:Gtk.Container.add参数1必须是Gtk.Widget,而不是pywebkitgtk.WebView。但正如我所说的,我相信问题在于标准pywebkitgtk和带有DOM绑定的修补版本之间的差异。如果我用标准的pywebkitgtk来尝试你的代码,即导入webkit而不是导入pywebkitgtk,它可以正常工作,但我没有访问DOM的权限。好吧,看起来他们没有将其创建为小部件,那么嗯。。仅仅在窗口中添加web\u视图也不起作用?删除任何SWF也不起作用,不幸的是,出现了一个名错误。在ipython中使用此代码时,我现在注意到,在定义WebView web_view=pywebkitgtk.WebView之后,窗口就会打开,因此在此之后,它是一个
我已经太迟了。我也尝试过如果任何构造函数参数改变它,但也没有运气。不幸的是,它似乎被烤进了课堂。无论如何,谢谢你的想法!我相信这只适用于标准,但不适用于包含完整DOM绑定的。至少如果我试一下你的例子,我会得到一个打字错误。如果你有访问DOM的权限,我很想知道你是如何做到的。你从哪里得到错误的?我在此计算机上没有pywebkitgtk。调用sw.addweb_视图时,我得到TypeError:Gtk.Container.add参数1必须是Gtk.Widget,而不是pywebkitgtk.WebView。但正如我所说的,我相信问题在于标准pywebkitgtk和带有DOM绑定的修补版本之间的差异。如果我用标准的pywebkitgtk来尝试你的代码,即导入webkit而不是导入pywebkitgtk,它可以正常工作,但我没有访问DOM的权限。好吧,看起来他们没有将其创建为小部件,那么嗯。。仅仅在窗口中添加web\u视图也不起作用?删除任何SWF也不起作用,不幸的是,出现了一个名错误。在ipython中使用此代码时,我现在注意到,在定义WebView web_view=pywebkitgtk.WebView的那一刻,窗口就会打开,因此在这之后已经太晚了。我也尝试过如果任何构造函数参数改变它,但也没有运气。不幸的是,它似乎被烤进了课堂。无论如何,谢谢你的想法!