180 lines
6.6 KiB
Python
180 lines
6.6 KiB
Python
import tkinter as tk
|
|
from tkinter import ttk, messagebox
|
|
from DrissionPage import ChromiumPage, ChromiumOptions
|
|
import json
|
|
import threading
|
|
import time
|
|
|
|
class BrowserTool:
|
|
def __init__(self, root):
|
|
self.root = root
|
|
self.root.title('浏览器Cookie管理工具')
|
|
self.root.geometry('500x200')
|
|
self.root.resizable(False, False)
|
|
|
|
self.page = None
|
|
self.cookie_file = 'd:\\test\\openUrl\\cookies.json'
|
|
|
|
self.setup_ui()
|
|
|
|
def setup_ui(self):
|
|
frame = ttk.Frame(self.root, padding=20)
|
|
frame.pack(fill=tk.BOTH, expand=True)
|
|
|
|
ttk.Label(frame, text='网址:').grid(row=0, column=0, sticky=tk.W, pady=5)
|
|
self.url_entry = ttk.Entry(frame, width=60)
|
|
self.url_entry.grid(row=0, column=1, columnspan=3, pady=5, sticky=tk.W)
|
|
self.url_entry.insert(0, 'https://yunlu.sinopec.com/AddressBook/AddressBookCheck')
|
|
|
|
btn_frame = ttk.Frame(frame)
|
|
btn_frame.grid(row=1, column=0, columnspan=4, pady=20)
|
|
|
|
self.open_btn = ttk.Button(btn_frame, text='打开', width=15, command=self.open_browser)
|
|
self.open_btn.pack(side=tk.LEFT, padx=10)
|
|
|
|
self.save_btn = ttk.Button(btn_frame, text='保存', width=15, command=self.save_cookies)
|
|
self.save_btn.pack(side=tk.LEFT, padx=10)
|
|
|
|
self.import_btn = ttk.Button(btn_frame, text='导入', width=15, command=self.import_cookies)
|
|
self.import_btn.pack(side=tk.LEFT, padx=10)
|
|
|
|
self.status_var = tk.StringVar(value='就绪')
|
|
ttk.Label(frame, textvariable=self.status_var).grid(row=2, column=0, columnspan=4, pady=10)
|
|
|
|
def log(self, msg):
|
|
self.status_var.set(msg)
|
|
self.root.update()
|
|
|
|
def init_browser(self):
|
|
co = ChromiumOptions()
|
|
co.set_browser_path(r'C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe')
|
|
self.page = ChromiumPage(addr_or_opts=co)
|
|
|
|
def wait_page_loaded(self, timeout=30):
|
|
if self.page:
|
|
self.page.wait.doc_loaded(timeout=timeout)
|
|
self.page.ele('tag:body', timeout=timeout)
|
|
|
|
def open_browser(self):
|
|
def run():
|
|
try:
|
|
self.log('正在启动浏览器...')
|
|
self.init_browser()
|
|
|
|
url = self.url_entry.get().strip()
|
|
if not url:
|
|
messagebox.showerror('错误', '请输入网址')
|
|
return
|
|
|
|
self.log(f'正在打开: {url}')
|
|
self.page.get(url)
|
|
self.wait_page_loaded()
|
|
self.log('页面加载完成')
|
|
|
|
except Exception as e:
|
|
self.log(f'错误: {str(e)}')
|
|
messagebox.showerror('错误', str(e))
|
|
|
|
threading.Thread(target=run, daemon=True).start()
|
|
|
|
def save_cookies(self):
|
|
def run():
|
|
try:
|
|
if not self.page:
|
|
messagebox.showwarning('提示', '请先打开浏览器')
|
|
return
|
|
|
|
self.log('正在保存Cookies...')
|
|
cookies = self.page.cookies()
|
|
|
|
with open(self.cookie_file, 'w', encoding='utf-8') as f:
|
|
json.dump(cookies, f, ensure_ascii=False, indent=2)
|
|
|
|
self.log(f'Cookies已保存到 {self.cookie_file}')
|
|
|
|
self.log('正在关闭浏览器...')
|
|
self.page.quit()
|
|
self.page = None
|
|
self.log('浏览器已关闭')
|
|
|
|
messagebox.showinfo('成功', 'Cookies保存成功,浏览器已关闭')
|
|
|
|
except Exception as e:
|
|
self.log(f'错误: {str(e)}')
|
|
messagebox.showerror('错误', str(e))
|
|
|
|
threading.Thread(target=run, daemon=True).start()
|
|
|
|
def import_cookies(self):
|
|
def run():
|
|
try:
|
|
import os
|
|
if not os.path.exists(self.cookie_file):
|
|
messagebox.showwarning('提示', 'Cookie文件不存在,请先保存Cookies')
|
|
return
|
|
|
|
self.log('正在启动浏览器...')
|
|
self.init_browser()
|
|
|
|
self.log('正在加载Cookies...')
|
|
with open(self.cookie_file, 'r', encoding='utf-8') as f:
|
|
cookies = json.load(f)
|
|
|
|
url = self.url_entry.get().strip()
|
|
if not url:
|
|
messagebox.showerror('错误', '请输入网址')
|
|
return
|
|
|
|
from urllib.parse import urlparse
|
|
parsed = urlparse(url)
|
|
domain = parsed.netloc
|
|
|
|
self.page.get('about:blank')
|
|
|
|
for cookie in cookies:
|
|
cookie_dict = {
|
|
'name': cookie.get('name'),
|
|
'value': cookie.get('value'),
|
|
'domain': cookie.get('domain', domain),
|
|
'path': cookie.get('path', '/')
|
|
}
|
|
try:
|
|
self.page.set.cookies(cookie_dict)
|
|
except Exception as ce:
|
|
self.log(f'设置Cookie失败: {cookie.get("name")} - {str(ce)}')
|
|
|
|
self.log(f'已导入 {len(cookies)} 个Cookie')
|
|
|
|
self.log(f'正在打开: {url}')
|
|
self.page.get(url)
|
|
self.wait_page_loaded()
|
|
|
|
self.log('刷新页面验证登录状态...')
|
|
for i in range(3):
|
|
self.page.refresh()
|
|
self.wait_page_loaded()
|
|
time.sleep(1)
|
|
self.log(f'刷新第 {i+1} 次...')
|
|
|
|
self.log('页面加载完成')
|
|
|
|
except Exception as e:
|
|
self.log(f'错误: {str(e)}')
|
|
messagebox.showerror('错误', str(e))
|
|
|
|
threading.Thread(target=run, daemon=True).start()
|
|
|
|
def on_closing(self):
|
|
if self.page:
|
|
try:
|
|
self.page.quit()
|
|
except:
|
|
pass
|
|
self.root.destroy()
|
|
|
|
if __name__ == '__main__':
|
|
root = tk.Tk()
|
|
app = BrowserTool(root)
|
|
root.protocol('WM_DELETE_WINDOW', app.on_closing)
|
|
root.mainloop()
|