- Introduced `BrowserManager` class in `browser_utils.py` for streamlined browser initialization and configuration. - Added `EmailVerificationHandler` class in `get_veri_code.py` to handle email verification code retrieval. - Updated `cursor_pro_keep_alive.py` to utilize the new browser and email handling classes, improving code organization and readability. - Modified `config.ini` to update the email address for account configuration. - Removed obsolete `log.txt` file to clean up the project structure. - Added unit tests for email verification functionality in `test/get_veri_code_test.py`.
127 lines
3.6 KiB
Python
127 lines
3.6 KiB
Python
from DrissionPage import ChromiumOptions, Chromium
|
|
from DrissionPage.common import Keys
|
|
import time
|
|
import re
|
|
import sys
|
|
import os
|
|
|
|
|
|
def get_extension_path():
|
|
"""获取插件路径"""
|
|
root_dir = os.getcwd()
|
|
extension_path = os.path.join(root_dir, "turnstilePatch")
|
|
|
|
if hasattr(sys, "_MEIPASS"):
|
|
print("运行在打包环境中")
|
|
extension_path = os.path.join(sys._MEIPASS, "turnstilePatch")
|
|
|
|
print(f"尝试加载插件路径: {extension_path}")
|
|
|
|
if not os.path.exists(extension_path):
|
|
raise FileNotFoundError(
|
|
f"插件不存在: {extension_path}\n请确保 turnstilePatch 文件夹在正确位置"
|
|
)
|
|
|
|
return extension_path
|
|
|
|
|
|
def get_browser_options():
|
|
co = ChromiumOptions()
|
|
try:
|
|
extension_path = get_extension_path()
|
|
co.add_extension(extension_path)
|
|
except FileNotFoundError as e:
|
|
print(f"警告: {e}")
|
|
|
|
co.set_user_agent(
|
|
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.92 Safari/537.36"
|
|
)
|
|
co.set_pref("credentials_enable_service", False)
|
|
co.set_argument("--hide-crash-restore-bubble")
|
|
co.auto_port()
|
|
|
|
# Mac 系统特殊处理
|
|
if sys.platform == "darwin":
|
|
co.set_argument("--no-sandbox")
|
|
co.set_argument("--disable-gpu")
|
|
|
|
return co
|
|
|
|
|
|
def get_veri_code(username):
|
|
# 使用相同的浏览器配置
|
|
co = get_browser_options()
|
|
browser = Chromium(co)
|
|
code = None
|
|
|
|
try:
|
|
# 获取当前标签页
|
|
tab = browser.latest_tab
|
|
tab.run_js("try { turnstile.reset() } catch(e) { }")
|
|
|
|
# 打开临时邮箱网站
|
|
tab.get("https://tempmail.plus/zh")
|
|
time.sleep(2)
|
|
|
|
# 设置邮箱用户名
|
|
while True:
|
|
if tab.ele("@id=pre_button"):
|
|
# 点击输入框
|
|
tab.actions.click("@id=pre_button")
|
|
time.sleep(1)
|
|
# 删除之前的内容
|
|
tab.run_js('document.getElementById("pre_button").value = ""')
|
|
|
|
# 输入新用户名并回车
|
|
tab.actions.input(username).key_down(Keys.ENTER).key_up(Keys.ENTER)
|
|
break
|
|
time.sleep(1)
|
|
|
|
# 等待并获取新邮件
|
|
while True:
|
|
new_mail = tab.ele("@class=mail")
|
|
if new_mail:
|
|
if new_mail.text:
|
|
print("最新的邮件:", new_mail.text)
|
|
tab.actions.click("@class=mail")
|
|
break
|
|
else:
|
|
print(new_mail)
|
|
break
|
|
time.sleep(1)
|
|
|
|
# 提取验证码
|
|
if tab.ele("@class=overflow-auto mb-20"):
|
|
email_content = tab.ele("@class=overflow-auto mb-20").text
|
|
verification_code = re.search(
|
|
r"verification code is (\d{6})", email_content
|
|
)
|
|
if verification_code:
|
|
code = verification_code.group(1)
|
|
print("验证码:", code)
|
|
else:
|
|
print("未找到验证码")
|
|
|
|
# 删除邮件
|
|
if tab.ele("@id=delete_mail"):
|
|
tab.actions.click("@id=delete_mail")
|
|
time.sleep(1)
|
|
|
|
if tab.ele("@id=confirm_mail"):
|
|
tab.actions.click("@id=confirm_mail")
|
|
print("删除邮件")
|
|
|
|
except Exception as e:
|
|
print(f"发生错误: {str(e)}")
|
|
finally:
|
|
browser.quit()
|
|
|
|
return code
|
|
|
|
|
|
# 测试运行
|
|
if __name__ == "__main__":
|
|
test_username = "test_user" # 替换为你要测试的用户名
|
|
code = get_veri_code(test_username)
|
|
print(f"获取到的验证码: {code}")
|