Add initial implementation of Cursor Pro Keep Alive tool
- Created .gitignore to exclude unnecessary files. - Added config.ini for account configuration. - Implemented cursor_auth_manager.py for managing authentication. - Developed cursor_pro_keep_alive.py for automated account management. - Included CursorKeepAlive.spec for packaging. - Added gpt-accesstoken.py for obtaining ChatGPT access tokens. - Created README.md with usage instructions. - Updated requirements.txt with necessary dependencies. - Added run_cursor.bat for script execution. - Implemented update_cursor_auth.py for updating authentication details. - Included turnstilePatch for handling CAPTCHA challenges. - Added logging functionality in log.txt for tracking script execution. - Created dist folder with packaged executable and necessary files.
This commit is contained in:
166
gpt-accesstoken.py
Normal file
166
gpt-accesstoken.py
Normal file
@@ -0,0 +1,166 @@
|
||||
from DrissionPage import ChromiumOptions, Chromium
|
||||
import random
|
||||
import time
|
||||
|
||||
def handle_turnstile(tab):
|
||||
"""处理 Turnstile 验证"""
|
||||
print("准备处理验证")
|
||||
try:
|
||||
while True:
|
||||
if tab.ele('@id=email-input', timeout=2):
|
||||
print("无需验证 - 邮箱输入框已加载")
|
||||
return True
|
||||
|
||||
if tab.ele('@id=password', timeout=2):
|
||||
print("无需验证 - 密码输入框已加载")
|
||||
return True
|
||||
|
||||
try:
|
||||
challenge_element = (tab.ele("@name=cf-turnstile-response", timeout=2)
|
||||
.parent()
|
||||
.shadow_root
|
||||
.ele("tag:iframe")
|
||||
.ele("tag:body")
|
||||
.sr("tag:input"))
|
||||
|
||||
if challenge_element:
|
||||
print("验证框加载完成")
|
||||
time.sleep(random.uniform(1, 3))
|
||||
challenge_element.click()
|
||||
print("验证按钮已点击,等待验证完成...")
|
||||
time.sleep(2)
|
||||
return True
|
||||
except:
|
||||
pass
|
||||
|
||||
time.sleep(2)
|
||||
|
||||
except Exception as e:
|
||||
print(f"验证处理出错: {str(e)}")
|
||||
print('跳过验证')
|
||||
return False
|
||||
|
||||
account = 'your_chatgpt_account'
|
||||
password = 'your_chatgpt_password'
|
||||
|
||||
co = ChromiumOptions()
|
||||
co.add_extension("turnstilePatch")
|
||||
# co.headless()
|
||||
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()
|
||||
|
||||
browser = Chromium(co)
|
||||
tab = browser.latest_tab
|
||||
tab.run_js("try { turnstile.reset() } catch(e) { }")
|
||||
|
||||
print("\n步骤1: 开始访问网站...")
|
||||
|
||||
tab.get('https://chatgpt.com')
|
||||
print('等待页面加载...')
|
||||
|
||||
print("\n步骤2: 开始登录...")
|
||||
for _ in range(5):
|
||||
try:
|
||||
if tab.ele('xpath:/html/body/div[1]/div[1]/main/div[1]/div[1]/div/div[1]/div/div[3]/div/button[1]'):
|
||||
signin_btn = tab.ele('xpath:/html/body/div[1]/div[1]/main/div[1]/div[1]/div/div[1]/div/div[3]/div/button[1]')
|
||||
print("找到黑色登录按钮:", signin_btn.text)
|
||||
break
|
||||
if tab.ele('@data-testid=login-button'):
|
||||
signin_btn = tab.ele('@data-testid=login-button')
|
||||
print("找到蓝色登录按钮:", signin_btn.text)
|
||||
break
|
||||
if tab.ele("@name=cf-turnstile-response"):
|
||||
print('加载页面时出现CF验证, IP 质量太差, 请更换 IP 重新尝试!')
|
||||
browser.quit()
|
||||
exit()
|
||||
time.sleep(3)
|
||||
except Exception as e:
|
||||
print(f"处理登录按钮时出错: {str(e)}")
|
||||
|
||||
for _ in range(5):
|
||||
try:
|
||||
if signin_btn:
|
||||
signin_btn.click()
|
||||
print("点击登录按钮")
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"处理登录按钮时出错: {str(e)}")
|
||||
time.sleep(3)
|
||||
else:
|
||||
print("尝试点击登录按钮失败,程序退出")
|
||||
exit()
|
||||
|
||||
handle_turnstile(tab)
|
||||
|
||||
print("\n步骤3: 输入邮箱...")
|
||||
for _ in range(5):
|
||||
try:
|
||||
if tab.ele('@id=email-input'):
|
||||
tab.actions.click('@id=email-input').type(account)
|
||||
time.sleep(0.5)
|
||||
tab.ele('@class=continue-btn').click()
|
||||
print("输入邮箱并点击继续")
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"加载邮箱输入框时出错: {str(e)}")
|
||||
time.sleep(3)
|
||||
else:
|
||||
print("尝试加载邮箱输入框失败,程序退出")
|
||||
browser.quit()
|
||||
exit()
|
||||
|
||||
handle_turnstile(tab)
|
||||
|
||||
print("\n步骤4: 输入密码...")
|
||||
for _ in range(5):
|
||||
try:
|
||||
if tab.ele('@id=password'):
|
||||
print("密码输入框加载完成")
|
||||
tab.actions.click('@id=password').input(password)
|
||||
time.sleep(2)
|
||||
tab.ele('@type=submit').click('js')
|
||||
# tab.actions.click('@type=submit')
|
||||
print("输入密码并JS点击登录")
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"输入密码时出错: {str(e)}")
|
||||
time.sleep(3)
|
||||
else:
|
||||
print("尝试加载密码输入框失败,程序退出")
|
||||
browser.quit()
|
||||
exit()
|
||||
|
||||
for _ in range(5):
|
||||
try:
|
||||
if tab.ele('有什么可以帮忙的?'):
|
||||
print('登录成功!')
|
||||
break
|
||||
if tab.ele('重新发送电子邮件'):
|
||||
print('提示需要邮箱验证码,脚本终止,请手动获取')
|
||||
exit()
|
||||
except Exception as e:
|
||||
print(f"登录可能遇到问题: {str(e)}")
|
||||
time.sleep(3)
|
||||
else:
|
||||
print("登录失败,程序退出")
|
||||
browser.quit()
|
||||
exit()
|
||||
|
||||
time.sleep(random.uniform(1,2))
|
||||
print('\n',"步骤5: 获取access_token...")
|
||||
browser.new_tab('https://chatgpt.com/api/auth/session')
|
||||
tab = browser.latest_tab
|
||||
time.sleep(1)
|
||||
response_json = tab.json
|
||||
if response_json and 'accessToken' in response_json:
|
||||
access_token = response_json['accessToken']
|
||||
print('\n',"请复制保存你的access_token:",'\n')
|
||||
print(access_token)
|
||||
else:
|
||||
print("错误:未找到access token")
|
||||
|
||||
# input("\n按Enter键关闭浏览器...")
|
||||
browser.quit()
|
||||
|
||||
Reference in New Issue
Block a user