From 3af195284c75986df4dc6e45d05260f2dd1056ba Mon Sep 17 00:00:00 2001 From: rcholic Date: Sat, 27 Dec 2025 08:30:35 -0800 Subject: [PATCH 1/2] Enable auth cookie injection --- screenshot.png | Bin 9772 -> 103021 bytes sentience/__init__.py | 11 ++++ sentience/browser.py | 116 +++++++++++++++++++++++++++++++++++++++- sentience/models.py | 121 ++++++++++++++++++++++++++++++++++++++++++ sentience/utils.py | 41 +++++++++++++- 5 files changed, 286 insertions(+), 3 deletions(-) diff --git a/screenshot.png b/screenshot.png index b6b7e62e5b7704859af5ae9fdf73deb6ac61be06..e96bc424ecfa7b19d08d8fbef9f649e92d9e3707 100644 GIT binary patch literal 103021 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

;PprPbj@=Z4M3O|F=!>Xt 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�Zx5yt_hu(EQ*L5-5S`W#Slpb1oL zGX~)eAt52anrwvz;hFONA>#y!OXc31t4miwF|m$%>u-j&g*u$KuM@+cWF$0xaGlzX z?z?_|ez0^yLqhb*9(aR!Gc2bOV>n7&Va4pfc>wX;s0F+RB}*&^h>`znw_I(B7Xl~B zd1Ji)$+>;=$p^A4*rztr;pnym8xqf1&y5n`DM8U1mO772NPTia@&X|N!4`xoaHCfI z;ImS6GUWUAta-gef!d=J8^qSkV+w3S`i&t0hdf97(|yUhdbk<$Yi5;|kfpSJ9{ zBO7eLp$?H;!~4=m(6a^(bIgdXC*a7?2caCFJ`x(P*LKqp%&Y9&{jYahjvus>d%!&J z>*4Ea*s5m}6*bWwdJj$59kDg2Q@q`l<9Qw8udJ*rOd>(wiX(V`zIe*C z#e44$*HURO;pl=QO);E-AZOw5ejfrRTWU;CI1G+N7N6!aUqTSh=4!2Tbu!=!kLd+m z_VMvCtY%g=5VyEatw8i!bEO3qireqWO!w=e#aG>zh{Er38LkzFNx{JN&N>@ut>Q zYxKUFm@;0UUZTI_)%-cNKfHPXbE9kmwg7m722{#9hsG;o%&?aX+rxSm8{USf?R9+o zXy)@3Zl8-trH}~ULyW#&qw6>{14h3XGe)_E`YP9L4%SFQ0#Pt8PPU}wa2d1QH8l}* zu5NExtMP`C%MWRmf2R(V1}R=FyXF&fmov2%bD!VA83cB)GbiRJ-Z{vt>o0zLiX$+c zky5zK>Xz#3_3NEmf_WlczeSbF(L9-eUD})Yh@aMXcbbCwoo7hQ0p$xS11dE&N;bIf z-50})-%D$nU>Qe@jAjlNc!r5;{ZX)1KpMWF<&q)UEZvj(>n!u z@c8(=?gmVkh%n`r81d8mLg6=TdvL5OQe7WqO#(k04*~73Yj~j#+PK7h({rAynW4oJ zJUPqo7enh@dDavVaBhQWmWD=b;!EWg&;CPSAj^Kxe_h0(@BPC|^5_vL2bGGm&erRj z*owc|fz42N0~ZIUy5fntQJ3+b`H^BBuTM_%uqB*Nv|K)O+UvlRcwW~W2FFb@+1bz6 z>g*OqpDeqtHmHC68uDlo@&2^(u*IV>)oK2?Xnu++b+p(Qg%P@?rL9fEVdM-u6KjQ0 z>Cd+=eQ+HWi@UIJ9(b-Xv32(aHx#12+!s)nbi7Lg`Js%QK5>-lffl!MVjrA?26cI( zV!#Sq?gPm0q?m5xc%NlCGv#_Lgi*Bg+_DC&pwKg@~-#w`>ivgt3(7zQ;Z1 zx#y4j$9?WU^Dy&!=K0Oi9mEo~>)3NYd*p z`OxX8kn}ODr>bgeJxel-uQpJ3S&TwG<)db)?Fm(%<1iS(tM{xrWWYwMGM(#4M(+!as*!|*PX zKczG}*UsMF?{jBzN)$?bQ8eqS&bI7HGK;bDELN71($*s~89U&k1{@#} zarGsPuZM>ScSbqVefk6hhv`UAdO)DO+r#KU1RWy z+4JH3kM}z{R|5?65o=}5c=pMUDUUx3d&imnYqP|9L8?s&BXLhgWZ)LM0vX4iq7*K_ zP%pG-9l?@(a!FBM-f%wxA&b(TY_`gOU}*}-A8mD~x=m)O?b;h3}GLOwB> z$K^@4ho69oTjX$ovPs@rwu}zp)i_^;mro*PMQITKHdwU=8d>zddfVQ#xA_Z219t?K z1l8_AyN}l8W)O@{F8I1O60z0+K(l!_5ht$O*@iJ^J!m)9M((o>qZ`Y zb@blC&BrA_?oS|n?wp4p*q_qTnupOy>CEOaEoDcUsx|pJqXyAEv{{zpk-3Q31(74y zm_Y_9?md$ur)KGy7rv+8cE!O%oaxWJjs@AGkQva}tC1saP285uVqp|Lc* z(|Vp!QBj@ZnQ)cDy}4|uy{d^AlH*IT4tE(=^LeIOp7}?A!df9dKG3-Lxhu`~Vd@_+ zx`f|!qPpHM-aw5g^^?kDnq%V>O(If9yRTFUt2NE<`@tYi%{1FUeLlQu4>^!&si-q) z-fknepC<@oG-7-kfz1yXOBhLGt%EZM=m~W@ar*-IT>FhQt z!Es`~9;c~GcaHgddZ?luR>zI!!9&tsv$)Xr{wJ>4&EmWxjpB|R72OqH;&|O4oDW!Uw%aP5 zp-1oKzgQQf?A~b-Wm)x#dNAe&?(wJb?6!}Nwc+7C@re$K_6?~GuGlUnE-wD05+xsvzMu zVWBbFnb9R5G})0;wb6N$`|`$9e)lE!>^aHs>o2?E7>iJEKZ|->jQ-TXmbCPRb8ez- zar)I`R)^2`LJe;T#p@NlA_nAR8~TU-IV-C7q<_FLQ(x%V3Zaj)`-kOdyU87?^Mv%7 zRb+&4+y(fwWhA-PVmx*DLi~0aiv(dU1f26(!<}9-=7Sg9+%mY!T}m1$a|e7~<5W{G z2&S-w-)P|?$G7G2>=^Ig;Fd5jb9U=q3-5!l^liuFYc31|lRs7R^<5#tp7TcByu9Xg z)#3JrgClQ`t8EQrBtOM&pd`OzOGA&*r8`o^w@I7nP8FC3qcejck;()Qu_tdg_7FSqLj{*K`1L6 z3a>v`Rda4)#IYWg4o5ml?+~5Ai1cPGD$*U$*NItYt6cHl(y6PmELI6rPL^ z@?nKF&U{~2l`xHDl{F%mIRJHmI2{fc%{*0v{Df^{w4PifsgR=GY3k#XTl`+$UDt9- zk{8V=$vw?%+5Giz(?%?tcS2t(Fg?Fii3WYzr94_8y(e8CRQxSc4wh|6P|<1M(tiv0 zfBlCsw&#Ba-=yF{=hTHgsb(33B8z_IIoUs|{)9lr~b19R4BVYp3}?T{x;MQZk)7Q~NMv@R zr{BONc+KJC=&0kZ>2!!uph0Sd1}h)!hujCMbDdv}z_u4%Dx_9Hv^P&9E)^Z*zbXX3Y|c&Ho9&mkPkwg5@cdx z0~$rppw2%n_3Mu@qST_0kB#w#7`8jlgr}9GIK)xqpsD1WI51 zLY_4{f{oFw#r{XWg*uHgumvR$x+<--4j;;*d;)Gv{R)73Mk-GA0 zjR#6=Aq9R%%6(hE1ye2K!My}t*}JRzhg7;Q=Am2yRm%h5!CL_igg+s-l)7TYmbtxb zixT$GG=AZry?U!#K$pGpkmwx>=m*s>MbGJ?qZ1LHo!+#1!S=t67&PAMK7@xyU}@T2 ze2qR_uwLPGLtA+3?I_gGi3Wxnp=`u`U_r g-o+nW>?g36LzfZADeV+K&AvkWl>W&qt&2DR18s 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 None: # Parse proxy configuration if provided proxy_config = self._parse_proxy(self.proxy) if self.proxy else None + # Handle User Data Directory (Persistence) + if self.user_data_dir: + user_data_dir = str(self.user_data_dir) + Path(user_data_dir).mkdir(parents=True, exist_ok=True) + else: + user_data_dir = "" # Ephemeral temp dir (existing behavior) + # Build launch_persistent_context parameters launch_params = { - "user_data_dir": "", # Ephemeral temp dir + "user_data_dir": user_data_dir, "headless": False, # IMPORTANT: See note above "args": args, "viewport": {"width": 1280, "height": 800}, @@ -194,6 +216,10 @@ def start(self) -> None: self.page = self.context.pages[0] if self.context.pages else self.context.new_page() + # Inject storage state if provided (must be after context creation) + if self.storage_state: + self._inject_storage_state(self.storage_state) + # Apply stealth if available if STEALTH_AVAILABLE: stealth_sync(self.page) @@ -233,6 +259,92 @@ def goto(self, url: str) -> None: f"5. Diagnostic info: {diag}" ) + def _inject_storage_state( + self, storage_state: str | Path | StorageState | dict + ) -> None: # noqa: C901 + """ + Inject storage state (cookies + localStorage) into browser context. + + Args: + storage_state: Path to JSON file, StorageState object, or dict containing storage state + """ + import json + + # Load storage state + if isinstance(storage_state, (str, Path)): + # Load from file + with open(storage_state, encoding="utf-8") as f: + state_dict = json.load(f) + state = StorageState.from_dict(state_dict) + elif isinstance(storage_state, StorageState): + # Already a StorageState object + state = storage_state + elif isinstance(storage_state, dict): + # Dictionary format + state = StorageState.from_dict(storage_state) + else: + raise ValueError( + f"Invalid storage_state type: {type(storage_state)}. " + "Expected str, Path, StorageState, or dict." + ) + + # Inject cookies (works globally) + if state.cookies: + # Convert to Playwright cookie format + playwright_cookies = [] + for cookie in state.cookies: + cookie_dict = cookie.model_dump() + # Playwright expects lowercase keys for some fields + playwright_cookie = { + "name": cookie_dict["name"], + "value": cookie_dict["value"], + "domain": cookie_dict["domain"], + "path": cookie_dict["path"], + } + if cookie_dict.get("expires"): + playwright_cookie["expires"] = cookie_dict["expires"] + if cookie_dict.get("httpOnly"): + playwright_cookie["httpOnly"] = cookie_dict["httpOnly"] + if cookie_dict.get("secure"): + playwright_cookie["secure"] = cookie_dict["secure"] + if cookie_dict.get("sameSite"): + playwright_cookie["sameSite"] = cookie_dict["sameSite"] + playwright_cookies.append(playwright_cookie) + + self.context.add_cookies(playwright_cookies) + print(f"✅ [Sentience] Injected {len(state.cookies)} cookie(s)") + + # Inject LocalStorage (requires navigation to each domain) + if state.origins: + for origin_data in state.origins: + origin = origin_data.origin + if not origin: + continue + + # Navigate to origin to set localStorage + try: + self.page.goto(origin, wait_until="domcontentloaded", timeout=10000) + + # Inject localStorage + if origin_data.localStorage: + # Convert to dict format for JavaScript + localStorage_dict = { + item.name: item.value for item in origin_data.localStorage + } + self.page.evaluate( + """(localStorage_data) => { + for (const [key, value] of Object.entries(localStorage_data)) { + localStorage.setItem(key, value); + } + }""", + localStorage_dict, + ) + print( + f"✅ [Sentience] Injected {len(origin_data.localStorage)} localStorage item(s) for {origin}" + ) + except Exception as e: + print(f"⚠️ [Sentience] Failed to inject localStorage for {origin}: {e}") + def _wait_for_extension(self, timeout_sec: float = 5.0) -> bool: """Poll for window.sentience to be available""" start_time = time.time() diff --git a/sentience/models.py b/sentience/models.py index 6d617c1..b0ec47b 100644 --- a/sentience/models.py +++ b/sentience/models.py @@ -216,3 +216,124 @@ def to_playwright_dict(self) -> dict: config["username"] = self.username config["password"] = self.password return config + + +# ========== Storage State Models (Auth Injection) ========== + + +class Cookie(BaseModel): + """ + Cookie definition for storage state injection. + + Matches Playwright's cookie format for storage_state. + """ + + name: str = Field(..., description="Cookie name") + value: str = Field(..., description="Cookie value") + domain: str = Field(..., description="Cookie domain (e.g., '.example.com')") + path: str = Field(default="/", description="Cookie path") + expires: float | None = Field(None, description="Expiration timestamp (Unix epoch)") + httpOnly: bool = Field(default=False, description="HTTP-only flag") + secure: bool = Field(default=False, description="Secure (HTTPS-only) flag") + sameSite: Literal["Strict", "Lax", "None"] = Field( + default="Lax", description="SameSite attribute" + ) + + +class LocalStorageItem(BaseModel): + """ + LocalStorage item for a specific origin. + + Playwright stores localStorage as an array of {name, value} objects. + """ + + name: str = Field(..., description="LocalStorage key") + value: str = Field(..., description="LocalStorage value") + + +class OriginStorage(BaseModel): + """ + Storage state for a specific origin (localStorage). + + Represents localStorage data for a single domain. + """ + + origin: str = Field(..., description="Origin URL (e.g., 'https://example.com')") + localStorage: list[LocalStorageItem] = Field( + default_factory=list, description="LocalStorage items for this origin" + ) + + +class StorageState(BaseModel): + """ + Complete browser storage state (cookies + localStorage). + + This is the format used by Playwright's storage_state() method. + Can be saved to/loaded from JSON files for session injection. + """ + + cookies: list[Cookie] = Field( + default_factory=list, description="Cookies to inject (global scope)" + ) + origins: list[OriginStorage] = Field( + default_factory=list, description="LocalStorage data per origin" + ) + + @classmethod + def from_dict(cls, data: dict) -> "StorageState": + """ + Create StorageState from dictionary (e.g., loaded from JSON). + + Args: + data: Dictionary with 'cookies' and/or 'origins' keys + + Returns: + StorageState instance + """ + cookies = [ + Cookie(**cookie) if isinstance(cookie, dict) else cookie + for cookie in data.get("cookies", []) + ] + origins = [] + for origin_data in data.get("origins", []): + if isinstance(origin_data, dict): + # Handle localStorage as array of {name, value} or as dict + localStorage_data = origin_data.get("localStorage", []) + if isinstance(localStorage_data, dict): + # Convert dict to list of LocalStorageItem + localStorage_items = [ + LocalStorageItem(name=k, value=v) for k, v in localStorage_data.items() + ] + else: + # Already a list + localStorage_items = [ + LocalStorageItem(**item) if isinstance(item, dict) else item + for item in localStorage_data + ] + origins.append( + OriginStorage( + origin=origin_data.get("origin", ""), + localStorage=localStorage_items, + ) + ) + else: + origins.append(origin_data) + return cls(cookies=cookies, origins=origins) + + def to_playwright_dict(self) -> dict: + """ + Convert to Playwright-compatible dictionary format. + + Returns: + Dictionary compatible with Playwright's storage_state parameter + """ + return { + "cookies": [cookie.model_dump() for cookie in self.cookies], + "origins": [ + { + "origin": origin.origin, + "localStorage": [item.model_dump() for item in origin.localStorage], + } + for origin in self.origins + ], + } diff --git a/sentience/utils.py b/sentience/utils.py index 64a942b..286d0af 100644 --- a/sentience/utils.py +++ b/sentience/utils.py @@ -11,7 +11,10 @@ import json import re from dataclasses import dataclass -from typing import Any, Dict, List, Optional, Union +from pathlib import Path +from typing import Any + +from playwright.sync_api import BrowserContext @dataclass @@ -255,3 +258,39 @@ def compute_snapshot_digests(elements: list[dict[str, Any]]) -> dict[str, str]: "strict": sha256_digest(canonical_strict), "loose": sha256_digest(canonical_loose), } + + +def save_storage_state(context: BrowserContext, file_path: str | Path) -> None: + """ + Save current browser storage state (cookies + localStorage) to a file. + + This is useful for capturing a logged-in session to reuse later. + + Args: + context: Playwright BrowserContext + file_path: Path to save the storage state JSON file + + Example: + ```python + from sentience import SentienceBrowser, save_storage_state + + browser = SentienceBrowser() + browser.start() + + # User logs in manually or via agent + browser.goto("https://example.com") + # ... login happens ... + + # Save session for later + save_storage_state(browser.context, "auth.json") + ``` + + Raises: + IOError: If file cannot be written + """ + storage_state = context.storage_state() + file_path_obj = Path(file_path) + file_path_obj.parent.mkdir(parents=True, exist_ok=True) + with open(file_path_obj, "w") as f: + json.dump(storage_state, f, indent=2) + print(f"✅ [Sentience] Saved storage state to {file_path_obj}") From 81ee8b01e284b4f037d240f784786dacdd73ce0f Mon Sep 17 00:00:00 2001 From: rcholic Date: Sat, 27 Dec 2025 08:36:25 -0800 Subject: [PATCH 2/2] example for auth injection --- README.md | 35 ++++ examples/auth_injection_agent.py | 263 +++++++++++++++++++++++++++++++ 2 files changed, 298 insertions(+) create mode 100644 examples/auth_injection_agent.py diff --git a/README.md b/README.md index d6a8d92..593c70c 100644 --- a/README.md +++ b/README.md @@ -426,6 +426,41 @@ with browser: See `examples/residential_proxy_agent.py` for complete examples. +### Authentication Session Injection + +Inject pre-recorded authentication sessions (cookies + localStorage) to start your agent already logged in, bypassing login screens, 2FA, and CAPTCHAs. This saves tokens and reduces costs by eliminating login steps. + +```python +# Workflow 1: Inject pre-recorded session from file +from sentience import SentienceBrowser, save_storage_state + +# Save session after manual login +browser = SentienceBrowser() +browser.start() +browser.goto("https://example.com") +# ... log in manually ... +save_storage_state(browser.context, "auth.json") + +# Use saved session in future runs +browser = SentienceBrowser(storage_state="auth.json") +browser.start() +# Agent starts already logged in! + +# Workflow 2: Persistent sessions (cookies persist across runs) +browser = SentienceBrowser(user_data_dir="./chrome_profile") +browser.start() +# First run: Log in +# Second run: Already logged in (cookies persist automatically) +``` + +**Benefits:** +- Bypass login screens and CAPTCHAs with valid sessions +- Save 5-10 agent steps and hundreds of tokens per run +- Maintain stateful sessions for accessing authenticated pages +- Act as authenticated users (e.g., "Go to my Orders page") + +See `examples/auth_injection_agent.py` for complete examples. + ## Best Practices ### 1. Wait for Dynamic Content diff --git a/examples/auth_injection_agent.py b/examples/auth_injection_agent.py new file mode 100644 index 0000000..95ff702 --- /dev/null +++ b/examples/auth_injection_agent.py @@ -0,0 +1,263 @@ +""" +Example: Using Authentication Session Injection with SentienceAgent + +Demonstrates how to inject pre-recorded authentication sessions (cookies + localStorage) +into SentienceBrowser to start agents already logged in, bypassing login screens and CAPTCHAs. + +Two Workflows: +1. Inject Pre-recorded Session: Load a saved session from a JSON file +2. Persistent Sessions: Use a user data directory to persist sessions across runs + +Benefits: +- Bypass login screens and CAPTCHAs +- Save tokens and reduce costs (no login steps needed) +- Maintain stateful sessions across agent runs +- Act as authenticated users (access "My Orders", "My Account", etc.) + +Usage: + # Workflow 1: Inject pre-recorded session + python examples/auth_injection_agent.py --storage-state auth.json + + # Workflow 2: Use persistent user data directory + python examples/auth_injection_agent.py --user-data-dir ./chrome_profile + +Requirements: +- OpenAI API key (OPENAI_API_KEY) for LLM +- Optional: Sentience API key (SENTIENCE_API_KEY) for Pro/Enterprise features +- Optional: Pre-saved storage state file (auth.json) or user data directory +""" + +import argparse +import os + +from sentience import SentienceAgent, SentienceBrowser, save_storage_state +from sentience.llm_provider import OpenAIProvider + + +def example_inject_storage_state(): + """Example 1: Inject pre-recorded session from file""" + print("=" * 60) + print("Example 1: Inject Pre-recorded Session") + print("=" * 60) + + # Path to saved storage state file + # You can create this file using save_storage_state() after logging in manually + storage_state_file = "auth.json" + + if not os.path.exists(storage_state_file): + print(f"\n⚠️ Storage state file not found: {storage_state_file}") + print("\n To create this file:") + print(" 1. Log in manually to your target website") + print(" 2. Use save_storage_state() to save the session") + print("\n Example code:") + print(" ```python") + print(" from sentience import SentienceBrowser, save_storage_state") + print(" browser = SentienceBrowser()") + print(" browser.start()") + print(" browser.goto('https://example.com')") + print(" # ... log in manually ...") + print(" save_storage_state(browser.context, 'auth.json')") + print(" ```") + print("\n Skipping this example...\n") + return + + openai_key = os.environ.get("OPENAI_API_KEY") + if not openai_key: + print("❌ Error: OPENAI_API_KEY not set") + return + + # Create browser with storage state injection + browser = SentienceBrowser( + storage_state=storage_state_file, # Inject saved session + headless=False, + ) + + llm = OpenAIProvider(api_key=openai_key, model="gpt-4o-mini") + agent = SentienceAgent(browser, llm, verbose=True) + + try: + print("\n🚀 Starting browser with injected session...") + browser.start() + + print("🌐 Navigating to authenticated page...") + # Agent starts already logged in! + browser.page.goto("https://example.com/orders") # Or your authenticated page + browser.page.wait_for_load_state("networkidle") + + print("\n✅ Browser started with pre-injected authentication!") + print(" Agent can now access authenticated pages without logging in") + + # Example: Use agent on authenticated pages + agent.act("Show me my recent orders") + agent.act("Click on the first order") + + print("\n✅ Agent execution complete!") + + except Exception as e: + print(f"\n❌ Error: {e}") + raise + + finally: + browser.close() + + +def example_persistent_session(): + """Example 2: Use persistent user data directory""" + print("=" * 60) + print("Example 2: Persistent Session (User Data Directory)") + print("=" * 60) + + # Directory to persist browser session + user_data_dir = "./chrome_profile" + + openai_key = os.environ.get("OPENAI_API_KEY") + if not openai_key: + print("❌ Error: OPENAI_API_KEY not set") + return + + # Create browser with persistent user data directory + browser = SentienceBrowser( + user_data_dir=user_data_dir, # Persist cookies and localStorage + headless=False, + ) + + llm = OpenAIProvider(api_key=openai_key, model="gpt-4o-mini") + agent = SentienceAgent(browser, llm, verbose=True) + + try: + print("\n🚀 Starting browser with persistent session...") + browser.start() + + # Check if this is first run (no existing session) + browser.page.goto("https://example.com") + browser.page.wait_for_load_state("networkidle") + + # First run: Agent needs to log in + # Second run: Agent is already logged in (cookies persist) + if os.path.exists(user_data_dir): + print("\n✅ Using existing session from previous run") + print(" Cookies and localStorage are loaded automatically") + else: + print("\n📝 First run - session will be saved after login") + print(" Next run will automatically use saved session") + + # Example: Log in (first run) or use existing session (subsequent runs) + agent.act("Click the sign in button") + agent.act("Type your email into the email field") + agent.act("Type your password into the password field") + agent.act("Click the login button") + + print("\n✅ Session will persist in:", user_data_dir) + print(" Next run will automatically use this session") + + except Exception as e: + print(f"\n❌ Error: {e}") + raise + + finally: + browser.close() + + +def example_save_storage_state(): + """Example 3: Save current session for later use""" + print("=" * 60) + print("Example 3: Save Current Session") + print("=" * 60) + + openai_key = os.environ.get("OPENAI_API_KEY") + if not openai_key: + print("❌ Error: OPENAI_API_KEY not set") + return + + browser = SentienceBrowser(headless=False) + llm = OpenAIProvider(api_key=openai_key, model="gpt-4o-mini") + agent = SentienceAgent(browser, llm, verbose=True) + + try: + print("\n🚀 Starting browser...") + browser.start() + + print("🌐 Navigate to your target website and log in manually...") + browser.page.goto("https://example.com") + browser.page.wait_for_load_state("networkidle") + + print("\n⏸️ Please log in manually in the browser window") + print(" Press Enter when you're done logging in...") + input() + + # Save the current session + storage_state_file = "auth.json" + save_storage_state(browser.context, storage_state_file) + + print(f"\n✅ Session saved to: {storage_state_file}") + print(" You can now use this file with storage_state parameter:") + print(f" browser = SentienceBrowser(storage_state='{storage_state_file}')") + + except Exception as e: + print(f"\n❌ Error: {e}") + raise + + finally: + browser.close() + + +def main(): + """Run auth injection examples""" + parser = argparse.ArgumentParser(description="Auth Injection Examples") + parser.add_argument( + "--storage-state", + type=str, + help="Path to storage state JSON file to inject", + ) + parser.add_argument( + "--user-data-dir", + type=str, + help="Path to user data directory for persistent sessions", + ) + parser.add_argument( + "--save-session", + action="store_true", + help="Save current session to auth.json", + ) + + args = parser.parse_args() + + print("\n" + "=" * 60) + print("Sentience SDK - Authentication Session Injection Examples") + print("=" * 60 + "\n") + + if args.save_session: + example_save_storage_state() + elif args.storage_state: + # Override default file path + import sys + + sys.modules[__name__].storage_state_file = args.storage_state + example_inject_storage_state() + elif args.user_data_dir: + # Override default directory + import sys + + sys.modules[__name__].user_data_dir = args.user_data_dir + example_persistent_session() + else: + # Run all examples + example_save_storage_state() + print("\n") + example_inject_storage_state() + print("\n") + example_persistent_session() + + print("\n" + "=" * 60) + print("Examples Complete!") + print("=" * 60) + print("\n💡 Tips:") + print(" - Use storage_state to inject pre-recorded sessions") + print(" - Use user_data_dir to persist sessions across runs") + print(" - Save sessions after manual login for reuse") + print(" - Bypass login screens and CAPTCHAs with valid sessions") + print(" - Reduce token costs by skipping login steps\n") + + +if __name__ == "__main__": + main()