summaryrefslogtreecommitdiffstats
path: root/g4f/Provider/you/har_file.py
diff options
context:
space:
mode:
Diffstat (limited to 'g4f/Provider/you/har_file.py')
-rw-r--r--g4f/Provider/you/har_file.py87
1 files changed, 85 insertions, 2 deletions
diff --git a/g4f/Provider/you/har_file.py b/g4f/Provider/you/har_file.py
index 281f37e2..a6981296 100644
--- a/g4f/Provider/you/har_file.py
+++ b/g4f/Provider/you/har_file.py
@@ -4,6 +4,8 @@ import json
import os
import random
import uuid
+import asyncio
+import requests
from ...requests import StreamSession, raise_for_status
@@ -65,8 +67,89 @@ async def sendRequest(tmpArk: arkReq, proxy: str = None):
return await response.text()
async def get_dfp_telemetry_id(proxy: str = None):
- return str(uuid.uuid4())
+ return await telemetry_id_with_driver(proxy)
global chatArks
if chatArks is None:
chatArks = readHAR()
- return await sendRequest(random.choice(chatArks), proxy) \ No newline at end of file
+ return await sendRequest(random.choice(chatArks), proxy)
+
+async def telemetry_id_with_driver(proxy: str = None):
+ from ...debug import logging
+ if logging:
+ print('getting telemetry_id for you.com with nodriver')
+ try:
+ import nodriver as uc
+ from nodriver import start, cdp, loop
+ except ImportError:
+ if logging:
+ print('nodriver not found, random uuid (may fail)')
+ return str(uuid.uuid4())
+
+ CAN_EVAL = False
+ payload_received = False
+ payload = None
+
+ try:
+ browser = await start()
+ tab = browser.main_tab
+
+ async def send_handler(event: cdp.network.RequestWillBeSent):
+ nonlocal CAN_EVAL, payload_received, payload
+ if 'telemetry.js' in event.request.url:
+ CAN_EVAL = True
+ if "/submit" in event.request.url:
+ payload = event.request.post_data
+ payload_received = True
+
+ tab.add_handler(cdp.network.RequestWillBeSent, send_handler)
+ await browser.get("https://you.com")
+
+ while not CAN_EVAL:
+ await tab.sleep(1)
+
+ await tab.evaluate('window.GetTelemetryID("public-token-live-507a52ad-7e69-496b-aee0-1c9863c7c819", "https://telemetry.stytch.com/submit");')
+
+ while not payload_received:
+ await tab.sleep(.1)
+
+ except Exception as e:
+ print(f"Error occurred: {str(e)}")
+
+ finally:
+ try:
+ await tab.close()
+ except Exception as e:
+ print(f"Error occurred while closing tab: {str(e)}")
+
+ try:
+ await browser.stop()
+ except Exception as e:
+ pass
+
+ headers = {
+ 'Accept': '*/*',
+ 'Accept-Language': 'en,fr-FR;q=0.9,fr;q=0.8,es-ES;q=0.7,es;q=0.6,en-US;q=0.5,am;q=0.4,de;q=0.3',
+ 'Connection': 'keep-alive',
+ 'Content-type': 'application/x-www-form-urlencoded',
+ 'Origin': 'https://you.com',
+ 'Referer': 'https://you.com/',
+ 'Sec-Fetch-Dest': 'empty',
+ 'Sec-Fetch-Mode': 'cors',
+ 'Sec-Fetch-Site': 'cross-site',
+ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36',
+ 'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
+ 'sec-ch-ua-mobile': '?0',
+ 'sec-ch-ua-platform': '"macOS"',
+ }
+
+ proxies = {
+ 'http': proxy,
+ 'https': proxy} if proxy else None
+
+ response = requests.post('https://telemetry.stytch.com/submit',
+ headers=headers, data=payload, proxies=proxies)
+
+ if '-' in response.text:
+ print(f'telemetry generated: {response.text}')
+
+ return (response.text)