Skip to content

Commit

Permalink
Create Pro5ChromeFinal3.py
Browse files Browse the repository at this point in the history
  • Loading branch information
hieuck committed Jul 2, 2024
1 parent daa149c commit cbb5414
Showing 1 changed file with 297 additions and 0 deletions.
297 changes: 297 additions & 0 deletions Pro5ChromeFinal3.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,297 @@
import tkinter as tk
from tkinter import ttk
import subprocess
import json
import os

# Đường dẫn tệp profiles.json, config.json và URL.js trong cùng thư mục với file .py
PROFILE_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'profiles.json')
CONFIG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'config.json')
URL_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'URL.js')

# Hàm để đọc danh sách profiles từ tệp
def read_profiles():
if os.path.exists(PROFILE_FILE):
with open(PROFILE_FILE, 'r') as file:
return json.load(file)
else:
return []

# Hàm để lưu danh sách profiles vào tệp
def save_profiles(profiles):
with open(PROFILE_FILE, 'w') as file:
json.dump(profiles, file, indent=4)

# Hàm để đọc đường dẫn Chrome từ config
def read_chrome_path():
if os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE, 'r') as file:
config = json.load(file)
return config.get('chrome_path', '') # Trả về đường dẫn Chrome từ config nếu có
else:
return ''

# Hàm để lưu đường dẫn Chrome vào config
def save_chrome_path(chrome_path):
# Đọc cấu hình hiện tại từ file
config = {}
if os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE, 'r') as file:
config = json.load(file)

# Kiểm tra nếu đường dẫn Chrome mới khác với đường dẫn hiện tại thì mới lưu lại
if chrome_path != config.get('chrome_path'):
config['chrome_path'] = chrome_path
with open(CONFIG_FILE, 'w') as file:
json.dump(config, file, indent=4)

# Hàm để mở Chrome với profile được chọn
def open_chrome(profile):
chrome_path = chrome_var.get() or read_chrome_path() or default_chrome_path # Lấy đường dẫn Chrome từ Combobox, nếu không có thì dùng đường dẫn mặc định
profile_directory = f"--profile-directory=Profile {profile}"
subprocess.Popen([chrome_path, profile_directory])

# Hàm để mở trang đăng nhập Google trong Chrome
def login_google(profile):
chrome_path = chrome_var.get() or read_chrome_path() or default_chrome_path # Lấy đường dẫn Chrome từ Combobox, nếu không có thì dùng đường dẫn mặc định
login_url = 'https://myaccount.google.com/'
profile_directory = f"--profile-directory=Profile {profile}"
subprocess.Popen([chrome_path, profile_directory, login_url])

# Hàm để đóng tất cả các tiến trình Chrome
def close_chrome():
try:
if os.name == 'nt': # Windows
os.system("taskkill /im chrome.exe /f")
else: # Unix-based
os.system("pkill chrome")
except Exception as e:
print(f"Đã xảy ra lỗi khi đóng Chrome: {e}")

# Hàm để mở Chrome và thêm profile nếu chưa tồn tại, sau đó mở Chrome
def open_chrome_and_add_profile():
selected_profile = profile_var.get()
if selected_profile:
if selected_profile not in profiles:
profiles.append(selected_profile)
profiles.sort() # Sắp xếp theo thứ tự ABC
save_profiles(profiles)
profile_dropdown['values'] = profiles
update_listbox()

# Lưu đường dẫn Chrome vào danh sách và config
new_chrome_path = chrome_var.get()
if new_chrome_path and new_chrome_path not in chrome_paths:
chrome_paths.append(new_chrome_path)
chrome_paths.sort() # Sắp xếp theo thứ tự ABC
save_chrome_paths_to_config()
chrome_dropdown['values'] = chrome_paths

open_chrome(selected_profile)
else:
print("Vui lòng chọn hoặc nhập một profile")

# Hàm để cập nhật Listbox theo thứ tự ABC
def update_listbox():
profiles_listbox.delete(0, tk.END)
for profile in sorted(profiles):
profiles_listbox.insert(tk.END, profile)

# Hàm để xử lý khi nhấn Enter trên Combobox để mở Chrome
def open_chrome_on_enter(event=None):
if event and event.keysym == 'Return':
open_chrome_and_add_profile()

# Hàm để đăng nhập Google với profile từ Combobox
def login_google_from_combobox(event=None):
selected_profile = profile_var.get()
if selected_profile:
login_google(selected_profile)
else:
print("Vui lòng chọn một profile từ Combobox")

# Hàm để đăng nhập Google với profile từ Listbox
def login_google_from_listbox(event=None):
index = profiles_listbox.curselection()
if index:
selected_profile = profiles_listbox.get(index)
login_google(selected_profile)
else:
print("Vui lòng chọn một profile từ danh sách")

# Hàm để mở profile từ Listbox
def open_profile_from_listbox(event=None):
index = profiles_listbox.curselection()
if index:
selected_profile = profiles_listbox.get(index)
open_chrome(selected_profile)
else:
print("Vui lòng chọn một profile từ danh sách")

# Hàm để lưu danh sách đường dẫn Chrome vào config
def save_chrome_paths_to_config():
config = {'chrome_paths': chrome_paths}
with open(CONFIG_FILE, 'w') as file:
json.dump(config, file, indent=4)

# Hàm để đọc danh sách URL từ tệp
def read_urls():
if os.path.exists(URL_FILE):
with open(URL_FILE, 'r') as file:
return json.load(file)
else:
return []

# Hàm để lưu danh sách URL vào tệp
def save_urls(urls):
with open(URL_FILE, 'w') as file:
json.dump(urls, file, indent=4)

# Hàm để thêm URL vào danh sách và lưu vào tệp
def add_url(url):
urls.append(url)
save_urls(urls)
update_url_listbox()

# Hàm để xóa URL từ danh sách và lưu lại
def delete_url():
index = url_listbox.curselection()
if index:
urls.pop(index[0])
save_urls(urls)
update_url_listbox()

# Hàm để cập nhật Listbox hiển thị danh sách URL
def update_url_listbox():
url_listbox.delete(0, tk.END)
for url in urls:
url_listbox.insert(tk.END, url)

# Hàm để mở URL trong trình duyệt mặc định
def open_url():
selected_index = url_listbox.curselection()
if selected_index:
selected_url = urls[selected_index[0]]
subprocess.Popen(['start', selected_url], shell=True)

# Đọc danh sách profiles từ tệp
profiles = read_profiles()

# Đường dẫn Chrome mặc định nếu không có trong config
default_chrome_path = 'C:/Program Files/Google/Chrome/Application/chrome.exe'

# Đọc danh sách đường dẫn Chrome từ config
if os.path.exists(CONFIG_FILE):
with open(CONFIG_FILE, 'r') as file:
config = json.load(file)
chrome_paths = config.get('chrome_paths', [default_chrome_path])
else:
chrome_paths = [default_chrome_path]

# Đọc danh sách URL từ tệp
urls = read_urls()

# Tạo cửa sổ chính
root = tk.Tk()
root.title("Profiles Google Chrome")

# Label và Combobox cho đường dẫn Chrome
chrome_path_label = ttk.Label(root, text="Chọn hoặc Nhập đường dẫn Chrome:")
chrome_path_label.pack(pady=10)

chrome_var = tk.StringVar()
chrome_var.set(read_chrome_path() or default_chrome_path)
chrome_dropdown = ttk.Combobox(root, textvariable=chrome_var)
chrome_dropdown['values'] = chrome_paths
chrome_dropdown.pack(pady=10)

# Label cho Combobox và Listbox
profile_label = ttk.Label(root, text="Chọn hoặc Nhập Profile:")
profile_label.pack(pady=10)

# Combobox để chọn hoặc nhập profile
profile_var = tk.StringVar()
profile_dropdown = ttk.Combobox(root, textvariable=profile_var)
profile_dropdown['values'] = profiles
profile_dropdown.pack(pady=10)

# Frame chứa các nút và Listbox
frame = ttk.Frame(root)
frame.pack(pady=20)

# Nút Mở Chrome và thêm đường dẫn nếu cần
open_button = ttk.Button(frame, text="Mở Chrome", command=open_chrome_and_add_profile)
open_button.pack(side=tk.LEFT, padx=5)

# Nút Đóng Chrome
close_button = ttk.Button(frame, text="Đóng Chrome", command=close_chrome)
close_button.pack(side=tk.LEFT, padx=5)

# Nút Đăng Nhập Google cho Combobox
login_button_combobox = ttk.Button(frame, text="Đăng Nhập Google", command=login_google_from_combobox)
login_button_combobox.pack(side=tk.LEFT, padx=5)

# Label cho danh sách profiles
profiles_label = ttk.Label(root, text="Danh sách Profiles:")
profiles_label.pack()

# Listbox để hiển thị danh sách profiles
profiles_listbox = tk.Listbox(root, selectmode=tk.SINGLE, height=5)
profiles_listbox.pack(pady=10)

# Thêm các profile vào Listbox
update_listbox()

# Nút Đăng Nhập Google cho Listbox
login_button_listbox = ttk.Button(root, text="Đăng Nhập Google (Danh sách)", command=login_google_from_listbox)
login_button_listbox.pack(pady=10)

# Xử lý sự kiện nhấp đúp vào một profile trong Listbox
profiles_listbox.bind('<Double-Button-1>', open_profile_from_listbox)

# Gắn sự kiện Enter cho Combobox
profile_dropdown.bind('<Return>', open_chrome_on_enter)

# Label và Entry cho nhập URL
url_label = ttk.Label(root, text="Nhập URL:")
url_label.pack(pady=10)

url_entry = ttk.Entry(root, width=50)
url_entry.pack(pady=10)

# Frame chứa các nút và Listbox cho URL
url_frame = ttk.Frame(root)
url_frame.pack(pady=20)

# Nút Thêm URL
add_url_button = ttk.Button(url_frame, text="Thêm URL", command=lambda: add_url(url_entry.get()))
add_url_button.pack(side=tk.LEFT, padx=5)

# Nút Mở URL
open_url_button = ttk.Button(url_frame, text="Mở URL", command=open_url)
open_url_button.pack(side=tk.LEFT, padx=5)

# Nút Xóa URL
delete_url_button = ttk.Button(url_frame, text="Xóa URL", command=delete_url)
delete_url_button.pack(side=tk.LEFT, padx=5)

# Label cho danh sách URL
url_label = ttk.Label(root, text="Danh sách URL:")
url_label.pack()

# Listbox để hiển thị danh sách URL
url_listbox = tk.Listbox(root, selectmode=tk.SINGLE, height=5)
url_listbox.pack(pady=10)

# Thêm các URL vào Listbox
update_url_listbox()

# Lưu trạng thái đường dẫn Chrome khi thoát
def on_close():
save_chrome_path(chrome_var.get())
root.destroy()

root.protocol("WM_DELETE_WINDOW", on_close)

# Chạy GUI
root.mainloop()

0 comments on commit cbb5414

Please sign in to comment.