forked from PyQt5/PyQt
-
Notifications
You must be signed in to change notification settings - Fork 6
/
GetCookie.py
112 lines (93 loc) · 3.48 KB
/
GetCookie.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on 2017年12月10日
@author: Irony
@site: https://pyqt.site , https://github.com/PyQt5
@email: [email protected]
@file: GetCookie
@description:
"""
import sys
try:
from PyQt5.QtCore import QUrl, QByteArray
from PyQt5.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile
from PyQt5.QtWidgets import QApplication, QTextEdit
except ImportError:
from PySide2.QtCore import QUrl, QByteArray
from PySide2.QtWebEngineWidgets import QWebEngineView, QWebEngineProfile
from PySide2.QtWidgets import QApplication, QTextEdit
class WebEngineView(QWebEngineView):
DomainCookies = {} # 存放domain的key-value
PathCookies = {} # 存放domain+path的key-value
def __init__(self, *args, **kwargs):
super(WebEngineView, self).__init__(*args, **kwargs)
self.cookieView = QTextEdit()
self.cookieView.resize(800, 400)
self.cookieView.move(400, 400)
self.cookieView.setWindowTitle('Cookies')
self.cookieView.show()
# 绑定cookie被添加的信号槽
QWebEngineProfile.defaultProfile().cookieStore(
).cookieAdded.connect(self.onCookieAdd)
self.loadFinished.connect(self.onLoadFinished)
def closeEvent(self, event):
self.cookieView.close()
super(WebEngineView, self).closeEvent(event)
def bytestostr(self, data):
if isinstance(data, str):
return data
if isinstance(data, QByteArray):
data = data.data()
if isinstance(data, bytes):
data = data.decode(errors='ignore')
else:
data = str(data)
return data
def onLoadFinished(self):
print("*****AllDomainCookies:", self.getAllDomainCookies())
print("*****AllPathCookies:", self.getAllPathCookies())
self.cookieView.append(
"AllDomainCookies: " + self.bytestostr(self.getAllDomainCookies()))
self.cookieView.append('')
self.cookieView.append(
"AllPathCookies: " + self.bytestostr(self.getAllPathCookies()))
self.cookieView.append('')
print("*****pyqt.site cookie:", self.getDomainCookies(".pyqt.site"))
print("*****pyqt.site / path cookie:",
self.getPathCookies(".pyqt.site/"))
def getAllDomainCookies(self):
return self.DomainCookies
def getDomainCookies(self, domain):
return self.DomainCookies.get(domain, {})
def getAllPathCookies(self):
return self.PathCookies
def getPathCookies(self, dpath):
return self.PathCookies.get(dpath, {})
def onCookieAdd(self, cookie):
"""
:param cookie: QNetworkCookie
"""
domain = cookie.domain()
path = cookie.path()
name = cookie.name().data()
value = cookie.value().data()
if domain in self.DomainCookies:
_cookie = self.DomainCookies[domain]
_cookie[name] = value
else:
self.DomainCookies[domain] = {name: value}
domain_path = domain + path
if domain_path in self.PathCookies:
_cookie = self.PathCookies[domain_path]
_cookie[name] = value
else:
self.PathCookies[domain_path] = {name: value}
# print("add cookie:", cookie.domain(),
# cookie.path(), cookie.name(), cookie.value())
if __name__ == "__main__":
app = QApplication(sys.argv)
w = WebEngineView()
w.show()
w.load(QUrl("https://pyqt.site"))
sys.exit(app.exec_())