Skip to content

Commit

Permalink
fix proof token
Browse files Browse the repository at this point in the history
  • Loading branch information
nek0us committed May 4, 2024
1 parent a3b5ebb commit c9b1da7
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 196 deletions.
293 changes: 127 additions & 166 deletions ChatGPTWeb/ChatGPTWeb.py

Large diffs are not rendered by default.

29 changes: 20 additions & 9 deletions ChatGPTWeb/OpenAIAuth.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,18 +84,28 @@ async def normal_begin(self,logger):
await self.browser_contexts.clear_cookies()
await self.login_page.goto(
url="https://chat.openai.com/auth/login",
wait_until="networkidle"
wait_until="load"
)
cf_locator = self.login_page.locator('//*[@id="cf-chl-widget-lpiae"]')
if await cf_locator.count() > 0:
logger.warning(f"cf checkbox in {self.email_address}")

await asyncio.sleep(5)
nologin_home_locator = self.login_page.locator('//html/body/div[1]/div[1]/div[1]/div/div/div/div/nav/div[2]/div[2]/button[2]')
auth_login = self.login_page.locator('//html/body/div[1]/div[1]/div[2]/div[1]/div/div/button[1]')
if await nologin_home_locator.count() > 0:
await nologin_home_locator.click()
# await self.login_page.wait_for_url("https://auth0.openai.com/**")
await self.login_page.click('[data-testid="login-button"]')
await self.login_page.wait_for_load_state(state="networkidle")
await self.login_page.wait_for_load_state("domcontentloaded")
elif await auth_login.count() > 0:
await auth_login.click()
else:
await self.login_page.click('[data-testid="login-button"]')
await asyncio.sleep(2)
current_url = self.login_page.url
use_url = "chat.openai.com"
if "chatgpt.com" in current_url:
use_url = "chatgpt.com"

if "auth0" in current_url:
await self.login_page.wait_for_url("https://auth0.openai.com/**")
else:
Expand Down Expand Up @@ -208,21 +218,22 @@ async def normal_begin(self,logger):
await self.login_page.locator('[name="password"]').first.fill(self.password)
await asyncio.sleep(1)
await self.login_page.click('button[type="submit"]._button-login-password')
await self.login_page.wait_for_load_state(state="networkidle")
await self.login_page.wait_for_load_state()

# go chatgpt
try:
await self.login_page.wait_for_url("https://chat.openai.com/")
await asyncio.sleep(3)
await self.login_page.wait_for_url(f"https://{use_url}/")
except Exception as e:
self.logger.warning(e)
# Try Again
await self.login_page.keyboard.press(EnterKey)
await self.login_page.wait_for_url("https://chat.openai.com/")
await self.login_page.wait_for_url(f"https://{use_url}/")

async with self.login_page.expect_response(url_check, timeout=20000) as a:
res = await self.login_page.goto(url_check, timeout=20000)
res = await a.value
if res.status == 200 and res.url == url_check:
if (res.status == 200 or res.status == 307)and res.url == url_check:
await asyncio.sleep(3)
await self.login_page.wait_for_load_state('load')
json_data = await self.login_page.evaluate(
Expand Down
8 changes: 7 additions & 1 deletion ChatGPTWeb/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,13 @@ async def main():
print(await chat.token_status())
continue
data = await chat.continue_chat(data)
print(f"ChatGPT:{data.msg_recv}")
if data.msg_recv == '':
print(f"error:{data.error_info}")
else:
print(f"ChatGPT:{data.msg_recv}")
data.error_info = ""
data.msg_recv = ""
data.p_msg_id = ""


loop = asyncio.get_event_loop()
Expand Down
28 changes: 17 additions & 11 deletions ChatGPTWeb/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ async def route_handle_wss(route: Route, request: Request):
msg_data.last_wss = wss["wss_url"]
except Exception as e:
logger.warning(f"get register-websocket error:{e}")
msg_data.error_info = f"get register-websocket error:{e}"
msg_data.error_info += f"get register-websocket error:{e}\n"
return msg_data,header
else:
header['Referer'] = f"https://chat.openai.com/c/{msg_data.conversation_id}" if msg_data.conversation_id else "https://chat.openai.com/"
Expand All @@ -54,7 +54,7 @@ async def route_handle_wss(route: Route, request: Request):
msg_data.last_wss = wss["wss_url"]
except Exception as e:
logger.warning(f"get register-websocket error:{e}")
msg_data.error_info = f"get register-websocket error:{e}"
msg_data.error_info += f"get register-websocket error:{e} \n"
return msg_data,header


Expand Down Expand Up @@ -83,14 +83,16 @@ async def async_send_msg(session: Session,msg_data: MsgData,url: str,logger,http
res = await client.post(url=url,json=json.loads(msg_data.post_data),headers=msg_data.header)
wss = res.json()
else:


async with session.page.expect_response(url,timeout=60000) as response_info: # type: ignore
try:
logger.debug(f"send:{msg_data.msg_send}")
await session.page.goto(url, timeout=60000) # type: ignore
except Exception as e:
if "Download is starting" not in e.args[0]:
logger.warning(f"send msg error:{e}")
msg_data.error_info = str(e)
msg_data.error_info += f"{str(e)}\n"
raise e
await session.page.wait_for_load_state("load") # type: ignore
if response_info.is_done():
Expand All @@ -109,7 +111,7 @@ async def async_send_msg(session: Session,msg_data: MsgData,url: str,logger,http
data = await recv_ws(session,websocket,stdout_flush)
except Exception as e:
logger.error(f"get recv wss msg error:{e}")
msg_data.error_info = str(e)
msg_data.error_info += f"{str(e)}\n"
return data

async def recv_ws(session: Session,ws,stdout_flush: bool = False):
Expand Down Expand Up @@ -193,11 +195,11 @@ async def recive_handle(session: Session,resp: Response,msg_data: MsgData,logger
stream_lines = stream_text.splitlines()
msg_data = stream2msgdata(stream_lines,msg_data)
if msg_data.msg_recv == "":
logger.warning(f"This content may violate openai's content policy,error:{msg_data.error_info}")
msg_data.error_info = f"This content may violate openai's content policy,error:{msg_data.error_info}"
logger.warning(f"recive_handle error:This content may violate openai's content policy,error:{msg_data.error_info}")
msg_data.error_info += f"recive_handle error: This content may violate openai's content policy,error:{msg_data.error_info}\n"
if not msg_data.status:
logger.warning(f"error:{msg_data.error_info}")
msg_data.error_info = f"error:{msg_data.error_info}"
logger.warning(f"recive_handle error:{msg_data.error_info}")
msg_data.error_info += f"recive_handle error:{msg_data.error_info}\n"
return msg_data

def create_session(**kwargs) -> Session:
Expand Down Expand Up @@ -228,7 +230,7 @@ async def retry_keep_alive(session: Session,url: str,chat_file: Path,logger,retr

if res.status == 403 and res.url == url:
session = await retry_keep_alive(session,url,chat_file,logger,retry)
elif res.status == 200 and res.url == url:
elif (res.status == 200 or res.status == 307) and res.url == url:
logger.debug(f"flush {session.email} cf cookie OK!")
await page.wait_for_timeout(1000)
cookies = await session.page.context.cookies()
Expand All @@ -248,10 +250,15 @@ async def retry_keep_alive(session: Session,url: str,chat_file: Path,logger,retr
session.login_cookies = cookies

update_session_token(session,chat_file,logger)

if session.status == Status.Login.value:
session.status = Status.Ready.value

else:
# no session-token,re login
session.status = Status.Update.value
token = await res.json()
token = await page.evaluate(
'() => JSON.parse(document.querySelector("body").innerText)')
if "error" in token and session.status != Status.Login.value:
session.status = Status.Update.value

Expand Down Expand Up @@ -282,7 +289,6 @@ async def Auth(session: Session,logger):
session.session_token = cookie
session.access_token = access_token
session.status = Status.Ready.value
session.login_state = True
logger.debug(f"{session.email} login success")
else:
logger.warning(f"{session.email} login error,waiting for next try")
Expand Down
12 changes: 8 additions & 4 deletions ChatGPTWeb/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -189,11 +189,11 @@ def __init__(self,
class Payload():

@staticmethod
def new_payload(prompt: str, arkose: Optional[str], gpt4: bool = False) -> str:
def new_payload(prompt: str, gpt4: bool = False) -> str:
return json.dumps({
"action": "next",
"messages": [{
"id": str(uuid.uuid4()),
"id": "aaa" + str(uuid.uuid4())[3:],
"author": {
"role": "user"
},
Expand All @@ -203,7 +203,7 @@ def new_payload(prompt: str, arkose: Optional[str], gpt4: bool = False) -> str:
},
"metadata": {}
}],
"parent_message_id": str(uuid.uuid4()),
"parent_message_id": "aaa" + str(uuid.uuid4())[3:],
"model": "gpt-4" if gpt4 else "text-davinci-002-render-sha",
"timezone_offset_min": -480,
# "suggestions": [
Expand All @@ -218,7 +218,9 @@ def new_payload(prompt: str, arkose: Optional[str], gpt4: bool = False) -> str:
"kind": "primary_assistant"
},
"force_paragen": False,
"forece_nulligen":False,
"force_rate_limit": False,
"force_paragen_model_slug": "",
"websocket_request_id": str(uuid.uuid4())

})
Expand All @@ -230,7 +232,7 @@ def old_payload(prompt: str, conversation_id: str, p_msg_id: str, arkose: Option
"next",
"history_and_training_disabled": False,
"messages": [{
"id": str(uuid.uuid4()),
"id": "aaa" + str(uuid.uuid4())[3:],
"author": {
"role": "user"
},
Expand All @@ -253,7 +255,9 @@ def old_payload(prompt: str, conversation_id: str, p_msg_id: str, arkose: Option
"kind": "primary_assistant"
},
"force_paragen": False,
"forece_nulligen":False,
"force_rate_limit": False,
"force_paragen_model_slug": "",
"websocket_request_id": str(uuid.uuid4())
})

Expand Down
3 changes: 3 additions & 0 deletions ChatGPTWeb/load.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@

load_js = r'''!function(){"use strict";var e,t,c,n,a,r,d,f,o,i,b,u,s={},l={};window._proof = null;window._chatp = null;window._device = null;function p(e){var t=l[e];if(void 0!==t)return t.exports;var c=l[e]={id:e,loaded:!1,exports:{}},n=!0;try{s[e].call(c.exports,c,c.exports,p),n=!1}finally{n&&delete l[e]}if (e === 6938 ){window._proof = c.exports;console.log(window._proof);}if (e === 39030 ){window._chatp = c.exports;}if (e === 39030 ){window._chatp = c.exports;}if (e === 71223 ){window._device = c.exports;}return c.loaded=!0,c.exports}p.m=s,p.amdD=function(){throw Error("define cannot be used indirect")},p.amdO={},e=[],p.O=function(t,c,n,a){if(c){a=a||0;for(var r=e.length;r>0&&e[r-1][2]>a;r--)e[r]=e[r-1];e[r]=[c,n,a];return}for(var d=1/0,r=0;r<e.length;r++){for(var c=e[r][0],n=e[r][1],a=e[r][2],f=!0,o=0;o<c.length;o++)d>=a&&Object.keys(p.O).every(function(e){return p.O[e](c[o])})?c.splice(o--,1):(f=!1,a<d&&(d=a));if(f){e.splice(r--,1);var i=n();void 0!==i&&(t=i)}}return t},p.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return p.d(t,{a:t}),t},c=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},p.t=function(e,n){if(1&n&&(e=this(e)),8&n||"object"==typeof e&&e&&(4&n&&e.__esModule||16&n&&"function"==typeof e.then))return e;var a=Object.create(null);p.r(a);var r={};t=t||[null,c({}),c([]),c(c)];for(var d=2&n&&e;"object"==typeof d&&!~t.indexOf(d);d=c(d))Object.getOwnPropertyNames(d).forEach(function(t){r[t]=function(){return e[t]}});return r.default=function(){return e},p.d(a,r),a},p.d=function(e,t){for(var c in t)p.o(t,c)&&!p.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:t[c]})},p.f={},p.e=function(e){return Promise.all(Object.keys(p.f).reduce(function(t,c){return p.f[c](e,t),t},[]))},p.u=function(e){return 5960===e?"static/chunks/1f110208-d32e1997faa6ce53.js":2098===e?"static/chunks/2098-5a3303fccfea16ac.js":5638===e?"static/chunks/5638-f6128b2e102edd50.js":6835===e?"static/chunks/3a34cc27-1e1aedfca8a33af4.js":"static/chunks/"+(({345:"b17906d7",1468:"1cc12f7f",3050:"bad47e52",3096:"queryString",4367:"02668ae5",4604:"tsub-middleware",5181:"30432d9c",5823:"30750f44",7493:"schemaFilter",7806:"5a09df74",8119:"auto-track",8150:"legacyVideos",8682:"sso",9214:"remoteMiddleware",9464:"ajs-destination"})[e]||e)+"."+({132:"212a2d16fc54bc9f",236:"714e6ade84171bdf",345:"400a5585923ddcd6",381:"ef0297fc7da1875e",468:"10722e38fd268625",676:"d2f667232e244ec9",718:"f955d9fdd98e7940",809:"21c64dd9f3ad7fd3",1004:"b1cf0521fdf2cb18",1087:"492838302bf3068a",1157:"35d241dd30cf4e76",1199:"546dd5c7fc38d94f",1222:"e787b747df71a6c5",1303:"b75e8b77dbf926ff",1322:"dde2dd36534cb76c",1351:"8d9fba738c877be4",1468:"72acf7aece6a6067",1773:"2ef4ea9177eb768c",1948:"ac9d04e4bd8fa3da",1964:"a0cd96bd7502770e",1966:"c6d411fee97100d1",2393:"af8fdcd12686e56a",2435:"62d2e7b054791bee",2498:"4d05352d2e396d47",2539:"0609ef2d151004a5",2601:"de6f902de0fb7177",2664:"55cf5046027a8a94",2885:"82305164aa66bf70",2887:"7d867fb77fb6776a",3050:"bff90320ea9fb350",3096:"df174924c6968fe4",3263:"2c50a3391cd3be8d",3277:"5acfa04f63719675",3551:"5af2294d3bd5cece",3695:"150f79498db76bf4",3697:"33501ed7b9c27ae9",3785:"f0856b38a8a716cb",3938:"f5c3d166696ad63c",4016:"4c387ff46fc8498b",4070:"75378e57820573df",4113:"0c0ee75dab4b3a1d",4114:"f0c19e9fbc4a2762",4367:"49384b6865f60a29",4426:"ad4800b422c932b2",4473:"acf7a241368f57f5",4570:"f2c0eee1557b58d3",4604:"02443f64694efcd0",4727:"37ce0ef35e730958",4771:"074bb67fe44824e9",4842:"7c48b0da5c213e7d",4878:"f05b05b2142582e7",4918:"c612fdb20c4aeed1",4919:"4d191fe56bb8c412",5169:"9cc0acb68303a7bf",5181:"925f2dcc50988579",5187:"6f639f5783387faf",5288:"0eb09cb17dfbb2ac",5316:"d086fbef221f5a05",5434:"a35b6efed2a7bf49",5502:"9b24aeb3ea297e2e",5650:"3aa93c82cca85633",5719:"1a42259f0c3d91c1",5760:"65bf22a3151d400d",5795:"45abb191a368d429",5823:"202d6ce3b1c147d5",5929:"0374738fcfc262ac",5938:"5efa7207e88c6f07",6050:"5d5c71f2abb4ca43",6053:"da2ed7069df80526",6165:"3ec786ae3e256585",6273:"5b540ac3b6c255f6",6513:"22a94ae6222fa3a8",6516:"69f7f008fba4d56f",6554:"86b6b3016ced266d",6587:"79678cf1c2968298",6618:"538182874c5ade75",6623:"8937c6a457a56066",6748:"b9b17bd451fe4be7",6867:"b6e1932064609f72",6875:"f1292ed21e21b9a3",6951:"e384cd5374a20564",6952:"6eb2d7a8e8cc5869",7082:"6544ac363482de13",7165:"ee58755557ef1a4e",7198:"ecce1b3a681c6eed",7493:"3a60974229840ffd",7712:"4fe2b5e28170b111",7806:"e29382a4b8aa7890",7830:"680e98388f6c13bb",8009:"4b289ed0b3bde543",8106:"f69fe453303ff933",8119:"29fac7521c4fbf25",8150:"87e726622393959c",8221:"c02f9d888cab7d1a",8349:"50a21d9002487ba1",8400:"373490dd5e325755",8451:"8d63d273474c65a7",8484:"9b71d259cef65e14",8571:"f6afe83cab63f6bf",8682:"67ca4c7e0f89ca9c",8854:"a5b92b3c382c9761",8928:"abab8ea598c50ecb",8930:"9ff2fc32bdcf08b9",9044:"c174589e81abab30",9120:"85010086890445f1",9214:"32ab39c72c4d4509",9271:"5a8fccd894aa5725",9284:"e7838f2a155b9b76",9464:"6abd0ae9c08306a9",9610:"aead845693cd969c",9643:"d9712f27d6eff7fb",9755:"f37fa948cb0b3a24",9789:"07290ec055f9eeb9",9826:"f4dae4f85c3d1244",9875:"fb7efb582c7c9374",9923:"9369fd6c8ea3c892"})[e]+".js"},p.miniCssF=function(e){return"static/css/"+({8682:"b2b5486bcec590b9",8854:"944a9aa5c00c7d0e"})[e]+".css"},p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),p.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n={},a="_N_E:",p.l=function(e,t,c,r){if(n[e]){n[e].push(t);return}if(void 0!==c)for(var d,f,o=document.getElementsByTagName("script"),i=0;i<o.length;i++){var b=o[i];if(b.getAttribute("src")==e||b.getAttribute("data-webpack")==a+c){d=b;break}}d||(f=!0,(d=document.createElement("script")).charset="utf-8",d.timeout=120,p.nc&&d.setAttribute("nonce",p.nc),d.setAttribute("data-webpack",a+c),d.src=p.tu(e),0===d.src.indexOf(window.location.origin+"/")||(d.crossOrigin="anonymous")),n[e]=[t];var u=function(t,c){d.onerror=d.onload=null,clearTimeout(s);var a=n[e];if(delete n[e],d.parentNode&&d.parentNode.removeChild(d),a&&a.forEach(function(e){return e(c)}),t)return t(c)},s=setTimeout(u.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=u.bind(null,d.onerror),d.onload=u.bind(null,d.onload),f&&document.head.appendChild(d)},p.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},p.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},p.tt=function(){return void 0===r&&(r={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(r=trustedTypes.createPolicy("nextjs#bundler",r))),r},p.tu=function(e){return p.tt().createScriptURL(e)},p.p="https://cdn.oaistatic.com/_next/",d=function(e,t,c,n){var a=document.createElement("link");return a.rel="stylesheet",a.type="text/css",a.onerror=a.onload=function(r){if(a.onerror=a.onload=null,"load"===r.type)c();else{var d=r&&("load"===r.type?"missing":r.type),f=r&&r.target&&r.target.href||t,o=Error("Loading CSS chunk "+e+" failed.\n("+f+")");o.code="CSS_CHUNK_LOAD_FAILED",o.type=d,o.request=f,a.parentNode.removeChild(a),n(o)}},a.href=t,0!==a.href.indexOf(window.location.origin+"/")&&(a.crossOrigin="anonymous"),document.head.appendChild(a),a},f=function(e,t){for(var c=document.getElementsByTagName("link"),n=0;n<c.length;n++){var a=c[n],r=a.getAttribute("data-href")||a.getAttribute("href");if("stylesheet"===a.rel&&(r===e||r===t))return a}for(var d=document.getElementsByTagName("style"),n=0;n<d.length;n++){var a=d[n],r=a.getAttribute("data-href");if(r===e||r===t)return a}},o={2272:0},p.f.miniCss=function(e,t){o[e]?t.push(o[e]):0!==o[e]&&({8682:1,8854:1})[e]&&t.push(o[e]=new Promise(function(t,c){var n=p.miniCssF(e),a=p.p+n;if(f(n,a))return t();d(e,a,t,c)}).then(function(){o[e]=0},function(t){throw delete o[e],t}))},p.b=document.baseURI||self.location.href,i={2272:0},p.f.j=function(e,t){var c=p.o(i,e)?i[e]:void 0;if(0!==c){if(c)t.push(c[2]);else if(/^(2272|8854)$/.test(e))i[e]=0;else{var n=new Promise(function(t,n){c=i[e]=[t,n]});t.push(c[2]=n);var a=p.p+p.u(e),r=Error();p.l(a,function(t){if(p.o(i,e)&&(0!==(c=i[e])&&(i[e]=void 0),c)){var n=t&&("load"===t.type?"missing":t.type),a=t&&t.target&&t.target.src;r.message="Loading chunk "+e+" failed.\n("+n+": "+a+")",r.name="ChunkLoadError",r.type=n,r.request=a,c[1](r)}},"chunk-"+e,e)}}},p.O.j=function(e){return 0===i[e]},b=function(e,t){var c,n,a=t[0],r=t[1],d=t[2],f=0;if(a.some(function(e){return 0!==i[e]})){for(c in r)p.o(r,c)&&(p.m[c]=r[c]);if(d)var o=d(p)}for(e&&e(t);f<a.length;f++)n=a[f],p.o(i,n)&&i[n]&&i[n][0](),i[n]=0;return p.O(o)},(u=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(b.bind(null,0)),u.push=b.bind(null,u.push.bind(u)),p.nc=void 0}();
//# sourceMappingURL=webpack-694d96c8249abc8f.js.map'''
9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -134,10 +134,13 @@ async def main():
print(await chat.token_status())
continue
data = await chat.continue_chat(data)
if data.msg_recv:
print(f"ChatGPT:{data.msg_recv}")
if data.msg_recv == '':
print(f"error:{data.error_info}")
else:
print(f"ChatGPT error:{data.error_info}")
print(f"ChatGPT:{data.msg_recv}")
data.error_info = ""
data.msg_recv = ""
data.p_msg_id = ""


loop = asyncio.get_event_loop()
Expand Down
Loading

0 comments on commit c9b1da7

Please sign in to comment.