@@ -28,10 +28,10 @@ async def create_stagehand_page(self, pw_page: Page) -> StagehandPage:
2828 stagehand_page = StagehandPage (pw_page , self .stagehand , self )
2929 await self .inject_custom_scripts (pw_page )
3030 self .page_map [pw_page ] = stagehand_page
31-
31+
3232 # Initialize frame tracking for this page
3333 await self ._attach_frame_navigated_listener (pw_page , stagehand_page )
34-
34+
3535 return stagehand_page
3636
3737 async def inject_custom_scripts (self , pw_page : Page ):
@@ -78,25 +78,18 @@ def get_active_page(self) -> StagehandPage:
7878 def register_frame_id (self , frame_id : str , page : StagehandPage ):
7979 """Register a frame ID to StagehandPage mapping."""
8080 self .frame_id_map [frame_id ] = page
81- self .stagehand .logger .debug (
82- f"Registered frame ID { frame_id } to page" , category = "context"
83- )
8481
8582 def unregister_frame_id (self , frame_id : str ):
8683 """Unregister a frame ID from the mapping."""
8784 if frame_id in self .frame_id_map :
8885 del self .frame_id_map [frame_id ]
89- self .stagehand .logger .debug (
90- f"Unregistered frame ID { frame_id } " , category = "context"
91- )
9286
9387 def get_stagehand_page_by_frame_id (self , frame_id : str ) -> StagehandPage :
9488 """Get StagehandPage by frame ID."""
9589 return self .frame_id_map .get (frame_id )
9690
9791 @classmethod
9892 async def init (cls , context : BrowserContext , stagehand ):
99- stagehand .logger .debug ("StagehandContext.init() called" , category = "context" )
10093 instance = cls (context , stagehand )
10194 # Pre-initialize StagehandPages for any existing pages
10295 stagehand .logger .debug (
@@ -176,7 +169,9 @@ async def wrapped_pages():
176169 return wrapped_pages
177170 return attr
178171
179- async def _attach_frame_navigated_listener (self , pw_page : Page , stagehand_page : StagehandPage ):
172+ async def _attach_frame_navigated_listener (
173+ self , pw_page : Page , stagehand_page : StagehandPage
174+ ):
180175 """
181176 Attach CDP listener for frame navigation events to track frame IDs.
182177 This mirrors the TypeScript implementation's frame tracking.
@@ -185,55 +180,55 @@ async def _attach_frame_navigated_listener(self, pw_page: Page, stagehand_page:
185180 # Create CDP session for the page
186181 cdp_session = await self ._context .new_cdp_session (pw_page )
187182 await cdp_session .send ("Page.enable" )
188-
183+
189184 # Get the current root frame ID
190185 frame_tree = await cdp_session .send ("Page.getFrameTree" )
191186 root_frame_id = frame_tree .get ("frameTree" , {}).get ("frame" , {}).get ("id" )
192-
187+
193188 if root_frame_id :
194189 # Initialize the page with its frame ID
195190 stagehand_page .update_root_frame_id (root_frame_id )
196191 self .register_frame_id (root_frame_id , stagehand_page )
197-
192+
198193 # Set up event listener for frame navigation
199194 def on_frame_navigated (params ):
200195 """Handle Page.frameNavigated events"""
201196 frame = params .get ("frame" , {})
202197 frame_id = frame .get ("id" )
203198 parent_id = frame .get ("parentId" )
204-
199+
205200 # Only track root frames (no parent)
206201 if not parent_id and frame_id :
207202 # Skip if it's the same frame ID
208203 if frame_id == stagehand_page .frame_id :
209204 return
210-
205+
211206 # Unregister old frame ID if exists
212207 old_id = stagehand_page .frame_id
213208 if old_id :
214209 self .unregister_frame_id (old_id )
215-
210+
216211 # Register new frame ID
217212 self .register_frame_id (frame_id , stagehand_page )
218213 stagehand_page .update_root_frame_id (frame_id )
219-
214+
220215 self .stagehand .logger .debug (
221216 f"Frame navigated from { old_id } to { frame_id } " ,
222- category = "context"
217+ category = "context" ,
223218 )
224-
219+
225220 # Register the event listener
226221 cdp_session .on ("Page.frameNavigated" , on_frame_navigated )
227-
222+
228223 # Clean up frame ID when page closes
229224 def on_page_close ():
230225 if stagehand_page .frame_id :
231226 self .unregister_frame_id (stagehand_page .frame_id )
232-
227+
233228 pw_page .once ("close" , on_page_close )
234-
229+
235230 except Exception as e :
236231 self .stagehand .logger .error (
237232 f"Failed to attach frame navigation listener: { str (e )} " ,
238- category = "context"
233+ category = "context" ,
239234 )
0 commit comments