python webkit webview 如何记住 cookies?
我写了一个简单的Python脚本,可以在网页窗口中打开Google音乐。不过,我找不到关于如何让webkit使用cookies的信息,这样我每次启动的时候就不用重新登录了。
这是我现在的代码:
#!/usr/bin/env python
import gtk, webkit
import ctypes
libgobject = ctypes.CDLL('/usr/lib/i386-linux-gnu/libgobject-2.0.so.0')
libwebkit = ctypes.CDLL('/usr/lib/libsoup-2.4.so.1')
libsoup = ctypes.CDLL('/usr/lib/libsoup-2.4.so.1')
libwebkit = ctypes.CDLL('/usr/lib/libwebkitgtk-1.0.so.0')
proxy_uri = libsoup.soup_uri_new('http://tcdproxy.tcd.ie:8080') #proxy urli
session = libwebkit.webkit_get_default_session()
libgobject.g_object_set(session, "proxy-uri", proxy_uri, None)
w = gtk.Window()
w.connect("destroy",w.destroy)
w.set_size_request(1000,600)
w.connect('delete-event', lambda w, event: gtk.main_quit())
s = gtk.ScrolledWindow()
v = webkit.WebView()
s.add(v)
w.add(s)
w.show_all()
v.open('http://music.google.com')
gtk.main()
如果有人能帮我解决这个问题,我会非常感激,感谢!
理查德
3 个回答
1
在最新版本,也就是 GTK WebKit2 4.0
中,这个操作需要按照以下方式进行:
import gi
gi.require_version('Soup', '2.4')
gi.require_version('WebKit2', '4.0')
from gi.repository import Soup
from gi.repository import WebKit2
browser = WebKit2.WebView()
website_data_manager = browser.get_website_data_manager()
cookie_manager = website_data_manager.get_cookie_manager()
cookie_manager.set_persistent_storage('PATH_TO_YOUR/cookie.txt', WebKit2.CookiePersistentStorage.TEXT)
cookie_manager.set_accept_policy(Soup.CookieJarAcceptPolicy.ALWAYS)
6
我知道这个问题已经很老了,我到处寻找答案。经过一些尝试和错误,最终我自己找到了答案。希望这能帮助到其他人。
这基本上是Matt的相同答案,只是用了GIR的自省功能,感觉更像是用Python写的。
from gi.repository import Soup
cookiejar = Soup.CookieJarText.new("<Your cookie path>", False)
cookiejar.set_accept_policy(Soup.CookieJarAcceptPolicy.ALWAYS)
session = WebKit.get_default_session()
session.add_feature(cookiejar)
7
我搞定了,不过这让我学了比我想要的更多的ctypes知识 -_-。试试这个吧——我需要的库路径和你不同,所以我就把相关的部分贴出来。
#remove all cookiejars
generic_cookiejar_type = libgobject.g_type_from_name('SoupCookieJar')
libsoup.soup_session_remove_feature_by_type(session, generic_cookiejar_type)
#and replace with a new persistent jar
cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)
libsoup.soup_session_add_feature(session, cookiejar)
代码其实挺容易理解的。还有一个SoupCookieJarSqlite,你可能会更喜欢这个,不过我觉得用文本文件开发会简单一些。
补充一下:其实,删除cookie罐似乎没有什么效果,所以合适的代码片段是
#add a new persistent cookie jar
cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)
libsoup.soup_session_add_feature(session, cookiejar)