parent
a786dca470
commit
7d7c5d9ead
325
main.py
325
main.py
|
@ -43,11 +43,18 @@ user32 = ctypes.windll.user32
|
||||||
|
|
||||||
root_plugin_dir = os.path.join(os.getcwd(), 'proxy_auth_plugin')
|
root_plugin_dir = os.path.join(os.getcwd(), 'proxy_auth_plugin')
|
||||||
|
|
||||||
# 初始化数据库
|
proxy_manager = ProxyManagerSQLite(db_path="proxies.db")
|
||||||
|
db_manager = AccountManagerSQLite(db_path="accounts.db")
|
||||||
|
|
||||||
|
proxy_manager.import_proxies_with_classifier( "Ip.txt",classifier=classifier_smartproxy)
|
||||||
|
|
||||||
|
|
||||||
|
def init_worker():
|
||||||
|
global proxy_manager, db_manager
|
||||||
|
# 在每个子进程中初始化数据库管理器
|
||||||
|
proxy_manager = ProxyManagerSQLite(db_path="proxies.db")
|
||||||
db_manager = AccountManagerSQLite(db_path="accounts.db")
|
db_manager = AccountManagerSQLite(db_path="accounts.db")
|
||||||
proxy_manager = ProxyManagerSQLite()
|
|
||||||
|
|
||||||
proxy_manager.import_proxies_with_classifier("IP.txt", classifier=classifier_smartproxy)
|
|
||||||
|
|
||||||
# 全局写入锁
|
# 全局写入锁
|
||||||
write_lock = multiprocessing.Lock()
|
write_lock = multiprocessing.Lock()
|
||||||
|
@ -274,14 +281,15 @@ def click_the_login_button(tab, login_a):
|
||||||
tab.get(href)
|
tab.get(href)
|
||||||
|
|
||||||
|
|
||||||
def input_email(tab, hwnd, email, email_input):
|
def input_email(tab, hwnd, email, email_input, max_retries=3):
|
||||||
email_input.clear()
|
|
||||||
"""
|
"""
|
||||||
输入账号并点击“下一步”按钮
|
输入账号并点击“下一步”按钮。如果两次尝试都未成功,退出。
|
||||||
:param tab: 浏览器对象
|
:param tab: 浏览器对象
|
||||||
:param email: 用户的邮箱账号
|
:param email: 用户的邮箱账号
|
||||||
|
:param email_input: 输入框对象
|
||||||
|
:param max_retries: 最大尝试次数
|
||||||
"""
|
"""
|
||||||
# 定位邮箱输入框
|
email_input.clear()
|
||||||
|
|
||||||
# 模拟人类输入,每次输入一个字符,并随机延迟
|
# 模拟人类输入,每次输入一个字符,并随机延迟
|
||||||
for char in email:
|
for char in email:
|
||||||
|
@ -302,14 +310,29 @@ def input_email(tab, hwnd, email, email_input):
|
||||||
|
|
||||||
tab.wait(2)
|
tab.wait(2)
|
||||||
|
|
||||||
simulate_mouse(hwnd, 600, 600)
|
retry_count = 0
|
||||||
|
while retry_count < max_retries:
|
||||||
|
# 模拟点击操作
|
||||||
|
simulate_mouse(hwnd, 650, 650)
|
||||||
|
|
||||||
|
# 等待页面加载开始
|
||||||
tab.wait.load_start()
|
tab.wait.load_start()
|
||||||
|
|
||||||
flag = tab.wait.ele_deleted(next_input)
|
# 等待7秒,看按钮是否消失
|
||||||
if not flag:
|
flag = tab.wait.ele_deleted(next_input, timeout=7)
|
||||||
|
if flag:
|
||||||
|
print(f"第 {retry_count + 1} 次尝试成功,按钮已消失。")
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
retry_count += 1 # 增加尝试次数
|
||||||
|
print(f"第 {retry_count} 次尝试失败,按钮未消失,重新尝试...")
|
||||||
|
|
||||||
|
if retry_count >= max_retries:
|
||||||
|
# 两次尝试都失败,调整按钮大小为10px
|
||||||
next_input.set.style('width', '10px')
|
next_input.set.style('width', '10px')
|
||||||
next_input.set.style('height', '10px')
|
next_input.set.style('height', '10px')
|
||||||
|
print(f"尝试 {max_retries} 次仍未成功,调整按钮大小并退出。")
|
||||||
|
return False # 超过最大尝试次数后退出函数
|
||||||
|
|
||||||
|
|
||||||
# 点击重试按钮
|
# 点击重试按钮
|
||||||
|
@ -317,7 +340,7 @@ def recover(tab, recover_a):
|
||||||
recover_a.click(by_js=True)
|
recover_a.click(by_js=True)
|
||||||
|
|
||||||
|
|
||||||
def input_password(tab, hwnd, password, password_input):
|
def input_password(tab, hwnd, password, password_input, max_retries=2):
|
||||||
password_input.clear()
|
password_input.clear()
|
||||||
"""
|
"""
|
||||||
输入密码并点击“下一步”按钮
|
输入密码并点击“下一步”按钮
|
||||||
|
@ -342,14 +365,44 @@ def input_password(tab, hwnd, password, password_input):
|
||||||
next_input.set.style('height', '1000px')
|
next_input.set.style('height', '1000px')
|
||||||
|
|
||||||
tab.wait(2)
|
tab.wait(2)
|
||||||
|
retry_count = 0
|
||||||
|
while retry_count < max_retries:
|
||||||
|
# 模拟点击操作
|
||||||
simulate_mouse(hwnd, 700, 700)
|
simulate_mouse(hwnd, 700, 700)
|
||||||
|
|
||||||
|
# 等待页面加载开始
|
||||||
tab.wait.load_start()
|
tab.wait.load_start()
|
||||||
|
|
||||||
flag = tab.wait.ele_deleted(next_input, timeout=10)
|
# 等待7秒,看按钮是否消失
|
||||||
if not flag:
|
flag = tab.wait.ele_deleted(next_input, timeout=7)
|
||||||
|
if flag:
|
||||||
|
print(f"第 {retry_count + 1} 次尝试成功,按钮已消失。")
|
||||||
|
break # 按钮成功消失,跳出循环
|
||||||
|
else:
|
||||||
|
# 获取页面提示信息
|
||||||
|
text = ""
|
||||||
|
try:
|
||||||
|
text = tab.ele('@aria-live=polite', timeout=1).text
|
||||||
|
except Exception as e:
|
||||||
|
print("获取页面提示失败:", e)
|
||||||
|
|
||||||
|
print(f"页面提示: {text}")
|
||||||
|
|
||||||
|
if text == "":
|
||||||
|
retry_count += 1
|
||||||
|
print(f"页面提示为空,第 {retry_count} 次尝试失败,重新尝试...")
|
||||||
|
else:
|
||||||
|
print(f"页面提示不为空:{text}, 不进行重试,退出。")
|
||||||
|
break # 页面提示不为空,退出重试流程
|
||||||
|
|
||||||
|
if retry_count >= max_retries:
|
||||||
|
# 两次尝试都失败,调整按钮大小为10px
|
||||||
next_input.set.style('width', '10px')
|
next_input.set.style('width', '10px')
|
||||||
next_input.set.style('height', '10px')
|
next_input.set.style('height', '10px')
|
||||||
|
print(f"尝试 {max_retries} 次仍未成功,调整按钮大小并退出。")
|
||||||
|
return False # 超过最大尝试次数后退出函数
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def click_alternate_email_verification_button(tab, email_div):
|
def click_alternate_email_verification_button(tab, email_div):
|
||||||
|
@ -396,14 +449,14 @@ def click_use_other_account_button2(tab, next_span):
|
||||||
|
|
||||||
# 修改辅助邮箱账号
|
# 修改辅助邮箱账号
|
||||||
def modify_the_secondary_email1(tab, auxiliary_email_account):
|
def modify_the_secondary_email1(tab, auxiliary_email_account):
|
||||||
# button = tab.ele('@@tag()=i@@text()=edit', timeout=15)
|
button = tab.ele('@@tag()=i@@text()=edit', timeout=15)
|
||||||
# button.click(by_js=True)
|
button.click(by_js=True)
|
||||||
# tab.wait(2)
|
tab.wait(2)
|
||||||
# input = tab.ele('@type=email', timeout=15)
|
input = tab.ele('@type=email', timeout=15)
|
||||||
# input.clear()
|
input.clear()
|
||||||
# for char in auxiliary_email_account:
|
for char in auxiliary_email_account:
|
||||||
# input.input(char) # Enter one character at a time
|
input.input(char) # Enter one character at a time
|
||||||
# tab.wait(random.uniform(0.1, 0.3)) # Random delay between 0.1 and 0.3 seconds
|
tab.wait(random.uniform(0.1, 0.3)) # Random delay between 0.1 and 0.3 seconds
|
||||||
|
|
||||||
# 点击保存
|
# 点击保存
|
||||||
save_span = tab.ele('@text()=Save', timeout=15)
|
save_span = tab.ele('@text()=Save', timeout=15)
|
||||||
|
@ -560,8 +613,6 @@ def update_status_in_db(email: str, status: str):
|
||||||
"""
|
"""
|
||||||
更新数据库中指定账户的状态。
|
更新数据库中指定账户的状态。
|
||||||
"""
|
"""
|
||||||
db_manager = AccountManagerSQLite(db_path="accounts.db")
|
|
||||||
|
|
||||||
# 更新数据库中对应账户的状态
|
# 更新数据库中对应账户的状态
|
||||||
db_manager.update_record(email=email, change_status=status)
|
db_manager.update_record(email=email, change_status=status)
|
||||||
|
|
||||||
|
@ -649,8 +700,8 @@ def logutGoogle(tab) -> bool:
|
||||||
return False # 无用分支,不过为了避免函数太长回头修改时候忘记,还是写个 False 以防万一
|
return False # 无用分支,不过为了避免函数太长回头修改时候忘记,还是写个 False 以防万一
|
||||||
|
|
||||||
|
|
||||||
def main(email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host, proxy_port, proxy_username, proxy_password,region, row_index):
|
def main(email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host, proxy_port, proxy_username, proxy_password,region):
|
||||||
|
update_status_in_db(email_account, '开始处理,没有改好')
|
||||||
|
|
||||||
print("邮箱账户:", email_account) # 邮箱账户
|
print("邮箱账户:", email_account) # 邮箱账户
|
||||||
print("邮箱密码:", email_password) # 邮箱密码
|
print("邮箱密码:", email_password) # 邮箱密码
|
||||||
|
@ -662,11 +713,12 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
print("代理用户名:", proxy_username) # 代理用户名
|
print("代理用户名:", proxy_username) # 代理用户名
|
||||||
print("代理密码:", proxy_password) # 代理密码
|
print("代理密码:", proxy_password) # 代理密码
|
||||||
print("代理区域:", region)
|
print("代理区域:", region)
|
||||||
print("行索引:", row_index) # 行索引
|
|
||||||
global browser, plugin_path, user_dir, attempt
|
global browser, plugin_path, user_dir, attempt
|
||||||
# 生成一个 6 位的随机数
|
# 生成一个 6 位的随机数
|
||||||
global random_number
|
global random_number
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
random_number = str(random.randint(100000000, 999999999))
|
random_number = str(random.randint(100000000, 999999999))
|
||||||
"""
|
"""
|
||||||
|
@ -683,6 +735,12 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
print("任务被强制停止,退出主函数")
|
print("任务被强制停止,退出主函数")
|
||||||
return None # 直接返回 None,跳过当前任务
|
return None # 直接返回 None,跳过当前任务
|
||||||
|
|
||||||
|
if not proxy_host:
|
||||||
|
save_log(random_number, f"没有{region}区域的代理")
|
||||||
|
update_status_in_db(email_account, f"没有{region}区域代理")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
lock = FileLock("proxy_auth_extension.lock")
|
lock = FileLock("proxy_auth_extension.lock")
|
||||||
|
|
||||||
with lock: # 加锁,确保其他进程在解锁前无法操作
|
with lock: # 加锁,确保其他进程在解锁前无法操作
|
||||||
|
@ -758,11 +816,11 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
flag = tab.get('https://workspace.google.com/intl/zh-CN/gmail/')
|
flag = tab.get('https://workspace.google.com/intl/zh-CN/gmail/')
|
||||||
save_log(random_number, f"访问谷歌邮箱页面的状态:{flag}")
|
save_log(random_number, f"访问谷歌邮箱页面的状态:{flag}")
|
||||||
if not flag:
|
if not flag:
|
||||||
browser.quit()
|
update_status_in_db(email_account, "无法访问谷歌邮箱页面,请重试")
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
save_log(random_number, "已经访问谷歌页面")
|
save_log(random_number, "已经访问谷歌页面")
|
||||||
|
|
||||||
|
@ -806,16 +864,23 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
if hwnd is None:
|
if hwnd is None:
|
||||||
print("无法找到窗口句柄")
|
print("无法找到窗口句柄")
|
||||||
save_log(random_number, "无法找到窗口句柄")
|
save_log(random_number, "无法找到窗口句柄")
|
||||||
|
update_status_in_db(email_account, '无法找到窗口句柄')
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 输入邮箱账号
|
# 输入邮箱账号
|
||||||
email_input = tab.ele('@aria-label=电子邮件地址或电话号码', timeout=15)
|
email_input = tab.ele('@aria-label=电子邮件地址或电话号码', timeout=15)
|
||||||
if email_input:
|
if email_input:
|
||||||
input_email(tab, hwnd, email_account, email_input) # 使用传入的邮箱账号
|
flag = input_email(tab, hwnd, email_account, email_input) # 使用传入的邮箱账号
|
||||||
|
if not flag:
|
||||||
|
update_status_in_db(random_number, "输入完邮箱后点击下一步出错")
|
||||||
|
return (
|
||||||
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
|
proxy_port,
|
||||||
|
proxy_username, proxy_password, region)
|
||||||
random_sleep(tab)
|
random_sleep(tab)
|
||||||
except ElementNotFoundError as e:
|
except ElementNotFoundError as e:
|
||||||
print(f"找不到输入邮箱账号的元素{e}")
|
print(f"找不到输入邮箱账号的元素{e}")
|
||||||
|
@ -824,7 +889,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
print("输入邮箱账号运行完毕")
|
print("输入邮箱账号运行完毕")
|
||||||
save_log(random_number, "输入邮箱账号运行完毕")
|
save_log(random_number, "输入邮箱账号运行完毕")
|
||||||
|
@ -847,7 +912,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
retry_with_recovery(tab, hwnd, email_account)
|
retry_with_recovery(tab, hwnd, email_account)
|
||||||
|
|
||||||
|
@ -868,7 +933,13 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
# 输入密码
|
# 输入密码
|
||||||
password_input = tab.ele('@@aria-label=输入您的密码@@type=password', timeout=15)
|
password_input = tab.ele('@@aria-label=输入您的密码@@type=password', timeout=15)
|
||||||
if password_input:
|
if password_input:
|
||||||
input_password(tab, hwnd, email_password, password_input) # 使用传入的邮箱密码
|
flag = input_password(tab, hwnd, email_password, password_input) # 使用传入的邮箱密码
|
||||||
|
if flag:
|
||||||
|
update_status_in_db(email_account, "密码的下一步无法点击")
|
||||||
|
return (
|
||||||
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
|
proxy_port,
|
||||||
|
proxy_username, proxy_password, region)
|
||||||
random_sleep(tab)
|
random_sleep(tab)
|
||||||
except ElementNotFoundError as e:
|
except ElementNotFoundError as e:
|
||||||
print(f"找不到密码输入框的元素:{e}")
|
print(f"找不到密码输入框的元素:{e}")
|
||||||
|
@ -877,7 +948,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
print("输入旧密码运行完毕")
|
print("输入旧密码运行完毕")
|
||||||
save_log(random_number, "输入旧密码运行完毕")
|
save_log(random_number, "输入旧密码运行完毕")
|
||||||
|
@ -901,7 +972,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_recovery_email, new_password, proxy_host,
|
email_account, email_password, old_recovery_email, new_recovery_email, new_password, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, row_index)
|
proxy_username, proxy_password)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 输入密码
|
# 输入密码
|
||||||
|
@ -916,7 +987,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
print("如果出现错误,输入密码运行完毕")
|
print("如果出现错误,输入密码运行完毕")
|
||||||
save_log(random_number, "如果出现错误后,输入密码运行完毕")
|
save_log(random_number, "如果出现错误后,输入密码运行完毕")
|
||||||
|
@ -925,6 +996,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
# 看下是否出现了手机号
|
# 看下是否出现了手机号
|
||||||
telephone = tab.ele("@text()=请输入电话号码,以便通过短信接收验证码。", timeout=5)
|
telephone = tab.ele("@text()=请输入电话号码,以便通过短信接收验证码。", timeout=5)
|
||||||
if telephone:
|
if telephone:
|
||||||
|
save_log(random_number, '接码')
|
||||||
update_status_in_db(email_account, '接码')
|
update_status_in_db(email_account, '接码')
|
||||||
browser.quit()
|
browser.quit()
|
||||||
return email_account
|
return email_account
|
||||||
|
@ -956,7 +1028,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
print("输入新密码运行完毕")
|
print("输入新密码运行完毕")
|
||||||
save_log(random_number, "输入新密码运行完毕")
|
save_log(random_number, "输入新密码运行完毕")
|
||||||
|
@ -975,7 +1047,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
print("点击辅助邮箱验证运行完毕")
|
print("点击辅助邮箱验证运行完毕")
|
||||||
save_log(random_number, "点击辅助邮箱验证运行完毕")
|
save_log(random_number, "点击辅助邮箱验证运行完毕")
|
||||||
|
@ -995,8 +1067,12 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
print("我要开始修改辅助邮箱账号了")
|
print("我要开始修改辅助邮箱账号了")
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
button = tab.ele('@@tag()=i@@text()=edit', timeout=15)
|
||||||
|
if button:
|
||||||
modify_the_secondary_email1(tab, new_recovery_email) # 使用传入的新辅助邮箱
|
modify_the_secondary_email1(tab, new_recovery_email) # 使用传入的新辅助邮箱
|
||||||
print("修改完成")
|
print("修改完成")
|
||||||
|
else:
|
||||||
|
print("没有修改辅助邮箱的界面,跳过")
|
||||||
# auxiliary_email_account_change = True
|
# auxiliary_email_account_change = True
|
||||||
except ElementNotFoundError as e:
|
except ElementNotFoundError as e:
|
||||||
# 捕获并打印异常,不中断后续代码执行
|
# 捕获并打印异常,不中断后续代码执行
|
||||||
|
@ -1006,7 +1082,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, row_index)
|
proxy_username, proxy_password)
|
||||||
else:
|
else:
|
||||||
print("辅助邮箱账号已经被更改过")
|
print("辅助邮箱账号已经被更改过")
|
||||||
save_log(random_number, "辅助邮箱账号已经被更改过")
|
save_log(random_number, "辅助邮箱账号已经被更改过")
|
||||||
|
@ -1017,9 +1093,8 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
save_log(random_number, "修改辅助邮箱1运行完毕")
|
save_log(random_number, "修改辅助邮箱1运行完毕")
|
||||||
|
|
||||||
if password_change and auxiliary_email_account_change:
|
if password_change and auxiliary_email_account_change:
|
||||||
update_status_in_db(email_account, '已更改')
|
|
||||||
logutGoogle(tab)
|
logutGoogle(tab)
|
||||||
browser.quit()
|
update_status_in_db(email_account, '已更改')
|
||||||
return email_account
|
return email_account
|
||||||
|
|
||||||
tab.handle_alert(accept=True)
|
tab.handle_alert(accept=True)
|
||||||
|
@ -1036,7 +1111,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# 点击头像进入邮箱的安全设置
|
# 点击头像进入邮箱的安全设置
|
||||||
|
@ -1052,7 +1127,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
tab.wait(3)
|
tab.wait(3)
|
||||||
|
|
||||||
|
@ -1072,19 +1147,20 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
tab.wait(1)
|
tab.wait(1)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if auxiliary_email_account_change:
|
if auxiliary_email_account_change:
|
||||||
|
logutGoogle(tab)
|
||||||
update_status_in_db(email_account, '已更改')
|
update_status_in_db(email_account, '已更改')
|
||||||
return email_account
|
return email_account
|
||||||
# 修改辅助邮箱2
|
# 修改辅助邮箱2
|
||||||
flag = modify_the_secondary_email2(tab, new_recovery_email, new_password, hwnd)
|
flag = modify_the_secondary_email2(tab, new_recovery_email, new_password, hwnd)
|
||||||
save_log(random_number, f"辅助邮箱是否被修改:{flag}")
|
save_log(random_number, f"辅助邮箱是否被修改:{flag}")
|
||||||
if flag:
|
if flag:
|
||||||
browser.quit()
|
logutGoogle(tab)
|
||||||
update_status_in_db(email_account, '已更改')
|
update_status_in_db(email_account, '已更改')
|
||||||
return email_account
|
return email_account
|
||||||
else:
|
else:
|
||||||
|
@ -1096,10 +1172,12 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
# 最多尝试3次循环
|
# 最多尝试3次循环
|
||||||
for attempt in range(3):
|
for attempt in range(3):
|
||||||
print(f"第 {attempt + 1} 次尝试检查验证码...")
|
print(f"第 {attempt + 1} 次尝试检查验证码...")
|
||||||
|
save_log(random_number, f"第 {attempt + 1} 次尝试检查验证码...")
|
||||||
|
|
||||||
# 获取当前程序运行的时间
|
# 获取当前程序运行的时间
|
||||||
current_time = datetime.now(timezone.utc)
|
current_time = datetime.now(timezone.utc)
|
||||||
print(f"当前时间为{current_time}")
|
print(f"当前时间为{current_time}")
|
||||||
|
save_log(random_number, f"当前时间为{current_time}")
|
||||||
|
|
||||||
# 检查验证码,超时时间为300秒,使用当前时间作为 start_time
|
# 检查验证码,超时时间为300秒,使用当前时间作为 start_time
|
||||||
try:
|
try:
|
||||||
|
@ -1126,6 +1204,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
tab.wait(5)
|
tab.wait(5)
|
||||||
|
|
||||||
print("点击确定")
|
print("点击确定")
|
||||||
|
save_log(random_number, "点击确定")
|
||||||
|
|
||||||
# 检查是否有报错提示
|
# 检查是否有报错提示
|
||||||
is_visible = tab.ele('@@id=c4@@tag()=p@@role=alert', timeout=1)
|
is_visible = tab.ele('@@id=c4@@tag()=p@@role=alert', timeout=1)
|
||||||
|
@ -1135,11 +1214,15 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
sent_code_button = tab.ele('@text():Send a new code.', timeout=15)
|
sent_code_button = tab.ele('@text():Send a new code.', timeout=15)
|
||||||
if sent_code_button:
|
if sent_code_button:
|
||||||
print(f"重新发送邮件的按钮为:{sent_code_button}")
|
print(f"重新发送邮件的按钮为:{sent_code_button}")
|
||||||
|
save_log(random_number, f"重新发送邮件的按钮为:{sent_code_button}")
|
||||||
sent_code_button.click(by_js=True)
|
sent_code_button.click(by_js=True)
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
# 如果没有报错,退出
|
# 如果没有报错,退出
|
||||||
print("辅助邮箱账号已经更改完毕")
|
print("辅助邮箱账号已经更改完毕")
|
||||||
|
save_log(random_number, "辅助邮箱账号已经更改完毕")
|
||||||
|
logutGoogle(tab)
|
||||||
|
update_status_in_db(email_account, "已更改")
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
# 如果未找到验证码,点击重新发送按钮并进入下一次循环
|
# 如果未找到验证码,点击重新发送按钮并进入下一次循环
|
||||||
|
@ -1150,6 +1233,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
continue
|
continue
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
print("超时未收到验证码,重新发送")
|
print("超时未收到验证码,重新发送")
|
||||||
|
save_log(random_number, "超时未收到验证码,重新发送")
|
||||||
sent_code_button = tab.ele('@text():Send a new code.', timeout=15)
|
sent_code_button = tab.ele('@text():Send a new code.', timeout=15)
|
||||||
if sent_code_button:
|
if sent_code_button:
|
||||||
sent_code_button.click(by_js=True)
|
sent_code_button.click(by_js=True)
|
||||||
|
@ -1160,7 +1244,7 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"出现未知错误:{e}")
|
print(f"出现未知错误:{e}")
|
||||||
save_log(random_number, f"出现未知错误:{e}")
|
save_log(random_number, f"出现未知错误:{e}")
|
||||||
|
@ -1168,23 +1252,25 @@ def main(email_account, email_password, old_recovery_email, new_password, new_re
|
||||||
return (
|
return (
|
||||||
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
email_account, email_password, old_recovery_email, new_password, new_recovery_email, proxy_host,
|
||||||
proxy_port,
|
proxy_port,
|
||||||
proxy_username, proxy_password, region, row_index)
|
proxy_username, proxy_password, region)
|
||||||
|
|
||||||
finally:
|
finally:
|
||||||
# browser.quit()
|
try:
|
||||||
|
browser.quit()
|
||||||
# 释放资源
|
# 释放资源
|
||||||
time.sleep(5)
|
time.sleep(5)
|
||||||
delete_folder(plugin_path)
|
delete_folder(plugin_path)
|
||||||
delete_folder(user_dir)
|
delete_folder(user_dir)
|
||||||
|
except Exception:
|
||||||
|
print("出现没有代理")
|
||||||
|
save_log(random_number, "出现没有代理")
|
||||||
|
|
||||||
|
|
||||||
def run_gui():
|
def run_gui():
|
||||||
stop_flag = threading.Event() # 用于控制任务中止的标志位
|
stop_flag = threading.Event() # 用于控制任务中止的标志位
|
||||||
exec_thread = None # 用于存储后台线程的引用
|
exec_thread = None # 用于存储后台线程的引用
|
||||||
|
|
||||||
|
|
||||||
def handle_file_select():
|
def handle_file_select():
|
||||||
file_path = filedialog.askopenfilename(
|
file_path = filedialog.askopenfilename(
|
||||||
title="选择 Excel 文件",
|
title="选择 Excel 文件",
|
||||||
|
@ -1196,18 +1282,56 @@ def run_gui():
|
||||||
|
|
||||||
def update_proxy_stats():
|
def update_proxy_stats():
|
||||||
try:
|
try:
|
||||||
# 从 ProxyManager 获取代理总数
|
# 国家代码列表
|
||||||
total_proxies = proxy_manager.get_proxy_count("ALL")
|
countries = {
|
||||||
print(f"更新代理信息的总数:{total_proxies}")
|
"AT": "奥地利", "BE": "比利时", "CZ": "捷克", "DE": "德国", "DK": "丹麦",
|
||||||
|
"ES": "西班牙", "FI": "芬兰", "FR": "法国", "GB": "英国", "HR": "克罗地亚",
|
||||||
|
"HU": "匈牙利", "IT": "意大利", "LT": "立陶宛", "LU": "卢森堡", "NL": "荷兰",
|
||||||
|
"PL": "波兰", "PT": "葡萄牙", "RO": "罗马尼亚", "SE": "瑞典", "SK": "斯洛伐克"
|
||||||
|
}
|
||||||
|
|
||||||
# 更新标签内容
|
# 获取全部区域的代理数量
|
||||||
proxy_stats = f"总数: {total_proxies}" # 只显示总代表数量
|
try:
|
||||||
|
total_proxies = proxy_manager.get_proxy_count("ALL")
|
||||||
|
except Exception as e:
|
||||||
|
total_proxies = "获取失败"
|
||||||
|
print(f"获取全部代理数时出错: {e}")
|
||||||
|
|
||||||
|
# 显示总代表数量
|
||||||
|
proxy_stats = f"总数: {total_proxies} 个代理\n\n"
|
||||||
|
|
||||||
|
# 获取并显示每个国家的代理数量
|
||||||
|
country_data = []
|
||||||
|
for country_code, country_name in countries.items():
|
||||||
|
try:
|
||||||
|
# 获取该国家的代理数量
|
||||||
|
country_proxy_count = proxy_manager.get_proxy_count(country_code)
|
||||||
|
country_data.append(f"{country_name}({country_code}): {country_proxy_count} 个代理")
|
||||||
|
except Exception as e:
|
||||||
|
country_data.append(f"{country_name}({country_code}): 获取代理数失败")
|
||||||
|
print(f"获取 {country_name} ({country_code}) 代理数时出错: {e}")
|
||||||
|
|
||||||
|
# 更新界面上的代理统计标签
|
||||||
lbl_proxy_stats.config(text=proxy_stats)
|
lbl_proxy_stats.config(text=proxy_stats)
|
||||||
|
# 分列显示国家的代理统计信息
|
||||||
|
max_rows = 5 # 每列最多显示多少行
|
||||||
|
columns = 4 # 显示几列
|
||||||
|
for col in range(columns):
|
||||||
|
for row in range(min(max_rows, len(country_data) - col * max_rows)):
|
||||||
|
label = tk.Label(root, text=country_data[col * max_rows + row], justify="left")
|
||||||
|
label.grid(row=row + 9, column=col, padx=5, pady=5, sticky="w")
|
||||||
|
|
||||||
|
# 为每列添加居中对齐,使用 columnspan 来确保列宽
|
||||||
|
for col in range(columns):
|
||||||
|
root.grid_columnconfigure(col, weight=1, uniform="equal")
|
||||||
|
|
||||||
|
# 调整列之间的间距,通过 columnconfigure 设置每列最小宽度(minsize)
|
||||||
|
for col in range(columns):
|
||||||
|
root.grid_columnconfigure(col, minsize=5)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"更新代理统计信息时出错: {e}")
|
print(f"更新代理统计信息时出错: {e}")
|
||||||
lbl_proxy_stats.config(text="获取代理统计信息失败")
|
lbl_proxy_stats.config(text="获取代理统计信息失败")
|
||||||
|
|
||||||
|
|
||||||
def start_processing():
|
def start_processing():
|
||||||
file_path = entry_file_path.get()
|
file_path = entry_file_path.get()
|
||||||
sheet_name = entry_sheet_name.get()
|
sheet_name = entry_sheet_name.get()
|
||||||
|
@ -1259,14 +1383,15 @@ def run_gui():
|
||||||
# 验证重试次数
|
# 验证重试次数
|
||||||
try:
|
try:
|
||||||
max_retries = int(max_retries)
|
max_retries = int(max_retries)
|
||||||
if max_retries < 0:
|
if max_retries < 0 or max_retries > 3:
|
||||||
raise ValueError("重试次数必须是大于或等于0的整数!")
|
raise ValueError("重试次数必须是整数且在0到3之间!")
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
messagebox.showerror("错误", f"无效的重试次数:{e}")
|
messagebox.showerror("错误", f"无效的重试次数:{e}")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
db_manager.import_from_excel(file_path, clear_old=True)
|
||||||
# 初始化 Excel 数据和进度条状态
|
# 初始化 Excel 数据和进度条状态
|
||||||
all_rows = read_data_from_db(file_path) # 读取 Excel 数据
|
all_rows = read_data_from_db() # 读取 Excel 数据
|
||||||
total_tasks = len(all_rows)
|
total_tasks = len(all_rows)
|
||||||
completed_count = 0
|
completed_count = 0
|
||||||
failed_count = 0
|
failed_count = 0
|
||||||
|
@ -1297,29 +1422,25 @@ def run_gui():
|
||||||
|
|
||||||
def parallel_execution_with_db(file_path, max_concurrency, max_retries):
|
def parallel_execution_with_db(file_path, max_concurrency, max_retries):
|
||||||
progress_queue = Queue()
|
progress_queue = Queue()
|
||||||
all_rows = read_data_from_db(file_path) # 从数据库中读取数据
|
all_rows = read_data_from_db() # 第一次读取数据
|
||||||
print(f"数据库中的数据:{all_rows}")
|
print(f"数据库中的数据:{all_rows}")
|
||||||
failed_rows = []
|
|
||||||
total_rows = len(all_rows)
|
total_rows = len(all_rows)
|
||||||
completed_count = 0
|
completed_count = 0
|
||||||
failed_count = 0
|
failed_count = 0
|
||||||
failed_emails = set() # 用于存储唯一的失败邮箱
|
|
||||||
# 更新进度条的总条目数
|
|
||||||
progress_bar['maximum'] = total_rows
|
progress_bar['maximum'] = total_rows
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
with Pool(processes=max_concurrency) as pool:
|
|
||||||
retry_count = 0
|
retry_count = 0
|
||||||
while all_rows or failed_rows:
|
|
||||||
|
with Pool(processes=max_concurrency, initializer=init_worker()) as pool:
|
||||||
|
while all_rows:
|
||||||
if stop_flag.is_set():
|
if stop_flag.is_set():
|
||||||
print("停止信号已接收,中止任务!")
|
print("停止信号已接收,中止任务!")
|
||||||
break
|
break
|
||||||
|
|
||||||
rows_to_process = all_rows + failed_rows # 处理所有待处理和失败的行
|
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
for i, row in enumerate(rows_to_process):
|
for i, row in enumerate(all_rows):
|
||||||
if stop_flag.is_set():
|
if stop_flag.is_set():
|
||||||
print("停止信号已接收,中止任务!")
|
print("停止信号已接收,中止任务!")
|
||||||
break
|
break
|
||||||
|
@ -1335,20 +1456,16 @@ def run_gui():
|
||||||
proxy = proxy_manager.get_random_proxy_by_region(region=region, remove_after_fetch=True)
|
proxy = proxy_manager.get_random_proxy_by_region(region=region, remove_after_fetch=True)
|
||||||
|
|
||||||
if proxy: # 如果分配成功
|
if proxy: # 如果分配成功
|
||||||
proxy_host, proxy_port, proxy_user, proxy_pass = proxy['host'], proxy['port'], proxy[
|
proxy_host, proxy_port, proxy_user, proxy_pass = proxy['host'], proxy['port'], proxy['user'], \
|
||||||
'user'], proxy['password']
|
proxy['password']
|
||||||
print(
|
print(f"为账号 {account_email} 分配代理:{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}")
|
||||||
f"为账号 {account_email} 分配代理:{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}")
|
|
||||||
|
|
||||||
# 将分配的代理信息传递到数据库中输入邮箱账号运行完毕
|
|
||||||
db_manager.update_record(account_email,
|
db_manager.update_record(account_email,
|
||||||
proxy=f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}")
|
proxy=f"{proxy_host}:{proxy_port}:{proxy_user}:{proxy_pass}")
|
||||||
row = row[:5] + (proxy_host, proxy_port, proxy_user, proxy_pass) + row[9:] # 将代理信息加入到数据行中
|
row = row[:5] + (proxy_host, proxy_port, proxy_user, proxy_pass) + row[9:] # 将代理信息加入到数据行中
|
||||||
else:
|
else:
|
||||||
print(f"为账号 {account_email} 分配代理失败,跳过此账号。")
|
print(f"为账号 {account_email} 分配代理失败,跳过此账号。")
|
||||||
|
|
||||||
|
|
||||||
# 使用写入锁保护 export_proxies
|
|
||||||
with write_lock:
|
with write_lock:
|
||||||
try:
|
try:
|
||||||
print("更新剩余可用IP")
|
print("更新剩余可用IP")
|
||||||
|
@ -1359,65 +1476,50 @@ def run_gui():
|
||||||
update_proxy_stats()
|
update_proxy_stats()
|
||||||
|
|
||||||
# 传递锁给子进程,并将当前账号数据传递给 main 函数
|
# 传递锁给子进程,并将当前账号数据传递给 main 函数
|
||||||
result = pool.apply_async(
|
result = pool.apply_async(main, args=(row), callback=lambda result: progress_queue.put(result))
|
||||||
main, args=(row),
|
|
||||||
callback=lambda result: progress_queue.put(result)
|
|
||||||
)
|
|
||||||
results.append(result)
|
results.append(result)
|
||||||
all_rows = []
|
|
||||||
failed_rows = []
|
|
||||||
|
|
||||||
for result in results:
|
for result in results:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
retry_row = result.get()
|
retry_row = result.get()
|
||||||
print(f"main函数返回的值: {retry_row}")
|
print(f"main函数返回的值: {retry_row}")
|
||||||
|
|
||||||
if isinstance(retry_row, tuple): # 返回的是元组,表示需要重试
|
if not retry_row: # 如果返回False,表示任务失败
|
||||||
email = retry_row[0] # 假设元组的第一个元素是邮箱地址
|
failed_count += 1
|
||||||
if email not in failed_emails: # 检查是否是新的失败邮箱
|
elif isinstance(retry_row, tuple): # 返回的是元组,表示需要重试
|
||||||
failed_emails.add(email) # 添加到失败集合
|
|
||||||
failed_count += 1 # 增加失败计数
|
failed_count += 1 # 增加失败计数
|
||||||
failed_rows.append(retry_row) # 添加到重试列表
|
|
||||||
|
|
||||||
lbl_progress_status.config(
|
|
||||||
text=f"完成:{completed_count}/{total_rows},失败:{failed_count}"
|
|
||||||
)
|
|
||||||
|
|
||||||
else: # 返回的是单个 account,表示成功
|
else: # 返回的是单个 account,表示成功
|
||||||
completed_count += 1
|
completed_count += 1
|
||||||
progress_bar['value'] = completed_count # 更新进度条值(百分比)
|
# 更新进度条和显示的状态
|
||||||
lbl_progress_status.config(
|
progress_bar['value'] = completed_count
|
||||||
text=f"完成:{completed_count}/{total_rows},失败:{failed_count}"
|
lbl_progress_status.config(text=f"完成:{completed_count}/{total_rows},失败:{failed_count}")
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
time.sleep(2) # 模拟耗时操作
|
time.sleep(2) # 模拟耗时操作
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"任务执行时发生错误: {e}")
|
print(f"任务执行时发生错误: {e}")
|
||||||
failed_count += 1
|
failed_count += 1
|
||||||
lbl_progress_status.config(
|
lbl_progress_status.config(text=f"完成:{completed_count}/{total_rows},失败:{failed_count}")
|
||||||
text=f"完成:{completed_count}/{total_rows},失败:{failed_count}"
|
|
||||||
)
|
|
||||||
messagebox.showwarning("任务执行错误", f"任务执行时发生错误: {e}")
|
messagebox.showwarning("任务执行错误", f"任务执行时发生错误: {e}")
|
||||||
|
|
||||||
|
# 如果停止信号被触发,则中止
|
||||||
if stop_flag.is_set():
|
if stop_flag.is_set():
|
||||||
print("停止信号已接收,中止任务!")
|
print("停止信号已接收,中止任务!")
|
||||||
break
|
break
|
||||||
|
|
||||||
if len(failed_rows) > 0 and retry_count < max_retries:
|
# 重试逻辑,重新从数据库读取失败的数据
|
||||||
|
if retry_count < max_retries:
|
||||||
retry_count += 1
|
retry_count += 1
|
||||||
all_rows = failed_rows
|
all_rows = read_data_from_db() # 重新从数据库读取失败的记录
|
||||||
failed_rows = []
|
else:
|
||||||
elif retry_count >= max_retries:
|
|
||||||
print("达到最大重试次数,停止重试。")
|
print("达到最大重试次数,停止重试。")
|
||||||
break
|
break
|
||||||
|
|
||||||
else:
|
else:
|
||||||
print("所有任务已完成。")
|
print("所有任务已完成。")
|
||||||
messagebox.showinfo('运行结束', '所有任务已经完成')
|
messagebox.showinfo('运行结束', '所有任务已经完成')
|
||||||
|
|
||||||
def read_data_from_db(file_path: str) -> List[Tuple]:
|
def read_data_from_db() -> List[Tuple]:
|
||||||
"""
|
"""
|
||||||
从数据库读取数据,同时保持与旧的接口和逻辑一致。
|
从数据库读取数据,同时保持与旧的接口和逻辑一致。
|
||||||
根据账号区域自动分配代理,并导入到数据库。
|
根据账号区域自动分配代理,并导入到数据库。
|
||||||
|
@ -1427,9 +1529,6 @@ def run_gui():
|
||||||
skip_keywords = {"已更改", "接码", "被盗"}
|
skip_keywords = {"已更改", "接码", "被盗"}
|
||||||
data = []
|
data = []
|
||||||
|
|
||||||
# 导入 Excel 数据到数据库,清空旧数据
|
|
||||||
db_manager.import_from_excel(file_path, clear_old=True)
|
|
||||||
|
|
||||||
# 从数据库中查询所有数据
|
# 从数据库中查询所有数据
|
||||||
accounts = db_manager.export_data()
|
accounts = db_manager.export_data()
|
||||||
|
|
||||||
|
@ -1447,7 +1546,7 @@ def run_gui():
|
||||||
# 不再分配代理,只是记录账号信息
|
# 不再分配代理,只是记录账号信息
|
||||||
data.append((
|
data.append((
|
||||||
account.email, account.original_password, account.original_aux_email,
|
account.email, account.original_password, account.original_aux_email,
|
||||||
account.new_password, account.new_aux_email, "", "", "", "",account.region, i + 2
|
account.new_password, account.new_aux_email, "", "", "", "",account.region
|
||||||
))
|
))
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
@ -1493,7 +1592,7 @@ def run_gui():
|
||||||
# 添加显示代理统计信息的标签
|
# 添加显示代理统计信息的标签
|
||||||
tk.Label(root, text="代理统计信息:").grid(row=8, column=0, padx=10, pady=10)
|
tk.Label(root, text="代理统计信息:").grid(row=8, column=0, padx=10, pady=10)
|
||||||
lbl_proxy_stats = tk.Label(root, text="代理统计信息未加载")
|
lbl_proxy_stats = tk.Label(root, text="代理统计信息未加载")
|
||||||
lbl_proxy_stats.grid(row=8, column=1, padx=10, pady=10, columnspan=2)
|
lbl_proxy_stats.grid(row=8, column=1, padx=5, pady=10, columnspan=2)
|
||||||
|
|
||||||
root.protocol("WM_DELETE_WINDOW", on_closing) # 绑定窗口关闭事件
|
root.protocol("WM_DELETE_WINDOW", on_closing) # 绑定窗口关闭事件
|
||||||
root.mainloop()
|
root.mainloop()
|
||||||
|
|
Loading…
Reference in New Issue