我目前正在python(http://live.gnome.org/PyWebKitGtk)中使用PyWebKitGtk。我想在我自己的小浏览器中清除所有cookie。我找到了有趣的方法webkit.HTTPResponse.clearCookies()但我不知道如何把手放在HTTPResponse对象的实例上:/
我不想将java脚本用于该任务。
答案 0 :(得分:0)
如果你看一下GitHub上绑定的当前状态,你会看到你想要的PyWebKitGTK doesn't yet provide - 它看起来没有HTTPResponse
类型的映射。不幸的是,我认为Javascript或代理是您现在唯一的选择。
编辑:
...当然,除非你想要真实不好并且熬夜学习ctypes。在这种情况下,你可以做魔术。要清除所有浏览器的Cookie,请尝试此操作。
import gtk, webkit, ctypes
libwebkit = ctypes.CDLL('libwebkit-1.0.so')
libgobject = ctypes.CDLL('libgobject-2.0.so')
libsoup = ctypes.CDLL('libsoup-2.4.so')
v = webkit.WebView()
#do whatever it is you do with WebView...
....
#get the cookiejar from the default session
#(assumes one session and one cookiesjar)
generic_cookiejar_type = libgobject.g_type_from_name('SoupCookieJar')
cookiejar = libsoup.soup_session_get_feature(session, generic_cookiejar_type)
#build a callback to delete cookies
DEL_COOKIE_FUNC = ctypes.CFUNCTYPE(None, ctypes.c_void_p)
def del_cookie(cookie):
libsoup.soup_cookie_jar_delete_cookie(cookiejar, cookie)
#run the callback on all the cookies
cookie_list = libsoup.soup_cookie_jar_all_cookies(cookiejar)
libsoup.g_slist_foreach(cookie_list, DEL_COOKIE_FUNC(del_cookie), None)
编辑:
刚开始需要这个,虽然这是正确的想法,但它需要工作。相反,试试这个 - 函数类型和cookiejar访问是固定的。
#add a new cookie jar
cookiejar = libsoup.soup_cookie_jar_new()
#uncomment the below line for a persistent jar instead
#cookiejar = libsoup.soup_cookie_jar_text_new('/path/to/your/cookies.txt',False)
libsoup.soup_session_add_feature(session, cookiejar)
#build a callback to delete cookies
DEL_COOKIE_FUNC = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_void_p, ctypes.c_void_p)
def del_cookie(cookie, userdata):
libsoup.soup_cookie_jar_delete_cookie(cookiejar, cookie)
return 0
#run the callback on all the cookies
cookie_list = libsoup.soup_cookie_jar_all_cookies(cookiejar)
libsoup.g_slist_foreach(cookie_list, DEL_COOKIE_FUNC(del_cookie), None)
请注意,您应该只在之前使用WebView,或者在WebKit回调中执行此操作,否则您将遇到超出通常与GTK编程相关的线程问题。