@@ -258,6 +258,7 @@ async def _create_page(self, request: Request, spider: Spider) -> Page:
258258 "scrapy_request_method" : request .method ,
259259 "exception" : ex ,
260260 },
261+ exc_info = True ,
261262 )
262263
263264 page .on ("close" , self ._make_close_page_callback (context_name ))
@@ -330,6 +331,10 @@ async def _download_request(self, request: Request, spider: Spider) -> Response:
330331 ),
331332 )
332333
334+ await _maybe_execute_page_init_callback (
335+ page = page , request = request , context_name = context_name , spider = spider
336+ )
337+
333338 try :
334339 result = await self ._download_request_with_page (request , page , spider )
335340 except Exception as ex :
@@ -346,6 +351,7 @@ async def _download_request(self, request: Request, spider: Spider) -> Response:
346351 "scrapy_request_method" : request .method ,
347352 "exception" : ex ,
348353 },
354+ exc_info = True ,
349355 )
350356 await page .close ()
351357 self .stats .inc_value ("playwright/page_count/closed" )
@@ -438,6 +444,7 @@ async def _apply_page_methods(self, page: Page, request: Request, spider: Spider
438444 "scrapy_request_method" : request .method ,
439445 "exception" : ex ,
440446 },
447+ exc_info = True ,
441448 )
442449 else :
443450 pm .result = await _maybe_await (method (* pm .args , ** pm .kwargs ))
@@ -590,6 +597,7 @@ async def _request_handler(route: Route, playwright_request: PlaywrightRequest)
590597 "playwright_request_method" : playwright_request .method ,
591598 "exception" : ex ,
592599 },
600+ exc_info = True ,
593601 )
594602 else :
595603 raise
@@ -621,6 +629,7 @@ def _attach_page_event_handlers(
621629 "scrapy_request_method" : request .method ,
622630 "exception" : ex ,
623631 },
632+ exc_info = True ,
624633 )
625634
626635
@@ -643,6 +652,35 @@ async def _set_redirect_meta(request: Request, response: PlaywrightResponse) ->
643652 request .meta ["redirect_reasons" ] = list (reversed (redirect_reasons ))
644653
645654
655+ async def _maybe_execute_page_init_callback (
656+ page : Page ,
657+ request : Request ,
658+ context_name : str ,
659+ spider : Spider ,
660+ ) -> None :
661+ page_init_callback = request .meta .get ("playwright_page_init_callback" )
662+ if page_init_callback :
663+ try :
664+ page_init_callback = load_object (page_init_callback )
665+ await page_init_callback (page , request )
666+ except Exception as ex :
667+ logger .warning (
668+ "[Context=%s] Page init callback exception for %s exc_type=%s exc_msg=%s" ,
669+ context_name ,
670+ repr (request ),
671+ type (ex ),
672+ str (ex ),
673+ extra = {
674+ "spider" : spider ,
675+ "context_name" : context_name ,
676+ "scrapy_request_url" : request .url ,
677+ "scrapy_request_method" : request .method ,
678+ "exception" : ex ,
679+ },
680+ exc_info = True ,
681+ )
682+
683+
646684def _make_request_logger (context_name : str , spider : Spider ) -> Callable :
647685 async def _log_request (request : PlaywrightRequest ) -> None :
648686 referrer = await request .header_value ("referer" )
0 commit comments