Я реализую минимальный браузер в PyObjC для своего исследования. Сначала я погуглил, как использовать webkit от pyobjc, и написал код, как показано ниже:
#coding: utf-8
import Foundation
import WebKit
import AppKit
import objc
def main():
app = AppKit.NSApplication.sharedApplication()
rect = Foundation.NSMakeRect(100,350,600,800)
win = AppKit.NSWindow.alloc()
win.initWithContentRect_styleMask_backing_defer_(
rect,
AppKit.NSTitledWindowMask |
AppKit.NSClosableWindowMask |
AppKit.NSResizableWindowMask |
AppKit.NSMiniaturizableWindowMask,
AppKit.NSBackingStoreBuffered,
False)
win.display()
win.orderFrontRegardless()
webview = WebKit.WebView.alloc()
webview.initWithFrame_(rect)
pageurl = Foundation.NSURL.URLWithString_("http://twitter.com")
req = Foundation.NSURLRequest.requestWithURL_(pageurl)
webview.mainFrame().loadRequest_(req)
win.setContentView_(webview)
app.run()
if __name__ == '__main__':
main()
Это работало нормально. Но я заметил, что этот браузер делится куки с сафари. Я хочу, чтобы он не зависел от моего Safari.app. Поэтому я снова погуглил и узнал, что могу переопределить методы обработки файлов cookie с помощью NSMutableURLRequest. Ниже приведен второй код, который я тестировал:
#coding: utf-8
import Foundation
import WebKit
import AppKit
import objc
def main():
app = AppKit.NSApplication.sharedApplication()
rect = Foundation.NSMakeRect(100,350,600,800)
win = AppKit.NSWindow.alloc()
win.initWithContentRect_styleMask_backing_defer_(
rect,
AppKit.NSTitledWindowMask |
AppKit.NSClosableWindowMask |
AppKit.NSResizableWindowMask |
AppKit.NSMiniaturizableWindowMask,
AppKit.NSBackingStoreBuffered,
False)
win.display()
win.orderFrontRegardless()
webview = WebKit.WebView.alloc()
webview.initWithFrame_(rect)
pageurl = Foundation.NSURL.URLWithString_("http://twitter.com")
req = Foundation.NSMutableURLRequest.requestWithURL_(pageurl)
Foundation.NSMutableURLRequest.setHTTPShouldHandleCookies_(req, False)
webview.mainFrame().loadRequest_(req)
win.setContentView_(webview)
app.run()
if __name__ == '__main__':
main()
Этот код показывает мне экран входа в твиттер :-) Но я не смог войти в твиттер с помощью этого браузера. Я ввожу имя учетной записи, пароль и нажимаю клавишу ввода. Затем браузер отображает временную шкалу учетной записи, которую я всегда использую в Safari.app.
Да, я знаю, что это правильный результат. Я ничего не писал об обработке файлов cookie. И мой вопрос по этому поводу. Я хочу знать, что:
- Как я могу реализовать и использовать что-то вроде NSHTTPCookieStorage?
- Могу ли я написать это на питоне?
Спасибо.