HanaokaYuzu / Gemini-API

✨ An elegant async Python wrapper for Google Gemini web app
https://pypi.org/project/gemini-webapi/
GNU Affero General Public License v3.0
134 stars 19 forks source link

__Secure-1PSIDTS #6

Closed raymerjacque closed 3 months ago

raymerjacque commented 4 months ago

the __Secure-1PSIDTS expires very quickly... is there no way around this ? a script to renew it, or another method of authentication ? another cookie or token that can be used ?

some google account dont even show "__Secure-1PSIDTS" its not available in F12 or cookie editor, what to do in such cases ?

HanaokaYuzu commented 4 months ago

As mentioned in readme, the best workaround is to use a separate google account.

https://github.com/HanaokaYuzu/Gemini-API/blob/3341fd2e0084f705bf81e7f11a79008e9fbd27b5/README.md?plain=1#L29

HanaokaYuzu commented 4 months ago

If there's no "__Secure-1PSIDTS" in your account's cookie list, simply leaving it empty should work. (I believe so, if not just let me know :)

raymerjacque commented 4 months ago

no, leaving the field blank just gives me :

File "/usr/local/lib/python3.10/dist-packages/gemini/client.py", line 124, in init raise AuthError( gemini.types.AuthError: Failed to initiate client. SECURE_1PSIDTS could get expired frequently, please make sure cookie values are up to date.

ERROR: Application startup failed. Exiting.

HanaokaYuzu commented 4 months ago

Can you delete line 76 of client.py and try if it works? Sorry that I don't have such an account to test it myself. https://github.com/HanaokaYuzu/Gemini-API/blob/3341fd2e0084f705bf81e7f11a79008e9fbd27b5/src/gemini/client.py#L74-L77 The code after deletion should be:

self.cookies = { "__Secure-1PSID": secure_1psid }

satounity commented 4 months ago

This is a translation, so please excuse my poor English.

I was also bothered by the early deadline. It expired in about 5-10 minutes.

However, if you close Gemini's screen immediately after retrieving the cookie, the cookie can be used for a long time. In fact, I have been using it continuously for over a week.

As a procedure There is no "Secure-1PSIDTS" after Gemini re-login. After a while, "Secure-1PSIDTS" will appear. (I don't know the conditions under which "__Secure-1PSIDTS" appears, but...)

After getting the values of “Secure-1PSID” and “Secure-1PSIDTS” Close the Gemini screen. If the Gemini screen is left open, cookies in Python will expire quickly.

HanaokaYuzu commented 4 months ago

However, if you close Gemini's screen immediately after retrieving the cookie, the cookie can be used for a long time.

You are right. Combined with another separate account it can last even longer (in my own case around 1 month)

As a procedure There is no "Secure-1PSIDTS" after Gemini re-login. After a while, "Secure-1PSIDTS" will appear.

I believe this behavior can be different by account. My account has __Secure-1PSIDTS immediately after logging out and re-login.

Btw re-login will force refresh your previous Secure-1PSID and Secure-1PSIDTS.

HanaokaYuzu commented 4 months ago

@raymerjacque Can you update to the latest version can try again with the account without __Secure-1PSIDTS?

Ran-Mewo commented 4 months ago

what I did was go into an incognito tab, login to gemini from there and use those cookies it's been quite a long time and it still hasn't expired for me

iamyifan commented 3 months ago

Hey, I had the same issue before.

My solution is that (macOS + Chrome):

  1. Open an incognito tab.
  2. Type Fn-12, and check out the network tab.
  3. Cope the __Secure-1PSID and __Secure-1PSIDTS to the right place. According to other people, __Secure-1PSIDTS may be missing in your cookies, but only using __Secure-1PSID works for me. Your code should look like this:

    import asyncio
    from gemini_webapi import GeminiClient
    
    # Replace "COOKIE VALUE HERE" with your actual cookie values.
    # Leave Secure_1PSIDTS empty if it's not available for your account.
    
    # chop off the "__Secure_1PSID=" and ";" at the end
    Secure_1PSID = 'g.a0_something_something_076'
    # chop off the "__Secure_1PSIDTS=" and ";" at the end
    Secure_1PSIDTS = 'sidts-somgthing_somgthing_EAA'
    
    async def main():
      # If browser-cookie3 is installed, simply use `client = GeminiClient()`
      client = GeminiClient(Secure_1PSID, Secure_1PSIDTS, proxies=None)
      await client.init(timeout=30, auto_close=False, close_delay=300, auto_refresh=False)  # I turned auto-refresh off
    
    asyncio.run(main())
  4. Haven't tested how long it can stay connected but It should work fine now : )