如何在Python+Webkit+Gtk中下载文件浏览器?
How to download a file browser in Python+Webkit+Gtk?
这是 Python Webkit Gtk 中的一个简单浏览器:
#!/usr/bin/python
import gtk
import webkit
view = webkit.WebView()
sw = gtk.ScrolledWindow()
sw.add(view)
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.add(sw)
win.show_all()
view.open("https://www.kernel.org/")
gtk.main()
浏览完美。不幸的是,在本地计算机上保存文件不起作用。我找不到现成的解决方案。我不需要进度条,文件夹选择,我要点击link导致下载。您知道将文件保存到目录 /home/user 的最简单方法吗?
如 docs 中所述,您必须连接到 mime-type-policy-decision-requested
和 download-requested
信号。
view.connect('download-requested', download_requested)
view.connect('mime-type-policy-decision-requested', policy_decision_requested)
然后检查 mime 类型并决定是否要下载它:
def policy_decision_requested(view, frame, request, mimetype, policy_decision):
if mimetype != 'text/html':
policy_decision.download()
return True
当 download-requested
之后发出时,您可以让 WebKit.Download
对象处理下载或(在这种情况下)使用 python:
def download_requested(view, download):
name = download.get_suggested_filename()
path = os.path.join(
GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD),
name
)
urlretrieve(download.get_uri(), path) # urllib.request.urlretrieve
return False
这是 Python Webkit Gtk 中的一个简单浏览器:
#!/usr/bin/python
import gtk
import webkit
view = webkit.WebView()
sw = gtk.ScrolledWindow()
sw.add(view)
win = gtk.Window(gtk.WINDOW_TOPLEVEL)
win.add(sw)
win.show_all()
view.open("https://www.kernel.org/")
gtk.main()
浏览完美。不幸的是,在本地计算机上保存文件不起作用。我找不到现成的解决方案。我不需要进度条,文件夹选择,我要点击link导致下载。您知道将文件保存到目录 /home/user 的最简单方法吗?
如 docs 中所述,您必须连接到 mime-type-policy-decision-requested
和 download-requested
信号。
view.connect('download-requested', download_requested)
view.connect('mime-type-policy-decision-requested', policy_decision_requested)
然后检查 mime 类型并决定是否要下载它:
def policy_decision_requested(view, frame, request, mimetype, policy_decision):
if mimetype != 'text/html':
policy_decision.download()
return True
当 download-requested
之后发出时,您可以让 WebKit.Download
对象处理下载或(在这种情况下)使用 python:
def download_requested(view, download):
name = download.get_suggested_filename()
path = os.path.join(
GLib.get_user_special_dir(GLib.UserDirectory.DIRECTORY_DOWNLOAD),
name
)
urlretrieve(download.get_uri(), path) # urllib.request.urlretrieve
return False