Cleanup resources Args: force: Whether to force cleanup browser process (ignoring AUTO_CLOSE_BROWSER config)
(self, force: bool = False)
| 435 | return [] |
| 436 | |
| 437 | async def cleanup(self, force: bool = False): |
| 438 | """ |
| 439 | Cleanup resources |
| 440 | |
| 441 | Args: |
| 442 | force: Whether to force cleanup browser process (ignoring AUTO_CLOSE_BROWSER config) |
| 443 | """ |
| 444 | try: |
| 445 | # Close browser context |
| 446 | if self.browser_context: |
| 447 | try: |
| 448 | # Check if context is already closed |
| 449 | # Try to get page list, if fails means already closed |
| 450 | try: |
| 451 | pages = self.browser_context.pages |
| 452 | if pages is not None: |
| 453 | await self.browser_context.close() |
| 454 | utils.logger.info("[CDPBrowserManager] Browser context closed") |
| 455 | except: |
| 456 | utils.logger.debug("[CDPBrowserManager] Browser context already closed") |
| 457 | except Exception as context_error: |
| 458 | # Only log warning if error is not due to already being closed |
| 459 | error_msg = str(context_error).lower() |
| 460 | if "closed" not in error_msg and "disconnected" not in error_msg: |
| 461 | utils.logger.warning( |
| 462 | f"[CDPBrowserManager] Failed to close browser context: {context_error}" |
| 463 | ) |
| 464 | else: |
| 465 | utils.logger.debug(f"[CDPBrowserManager] Browser context already closed: {context_error}") |
| 466 | finally: |
| 467 | self.browser_context = None |
| 468 | |
| 469 | # Disconnect browser |
| 470 | if self.browser: |
| 471 | try: |
| 472 | # Check if browser is still connected |
| 473 | if self.browser.is_connected(): |
| 474 | await self.browser.close() |
| 475 | utils.logger.info("[CDPBrowserManager] Browser connection disconnected") |
| 476 | else: |
| 477 | utils.logger.debug("[CDPBrowserManager] Browser connection already disconnected") |
| 478 | except Exception as browser_error: |
| 479 | # Only log warning if error is not due to already being closed |
| 480 | error_msg = str(browser_error).lower() |
| 481 | if "closed" not in error_msg and "disconnected" not in error_msg: |
| 482 | utils.logger.warning( |
| 483 | f"[CDPBrowserManager] Failed to close browser connection: {browser_error}" |
| 484 | ) |
| 485 | else: |
| 486 | utils.logger.debug(f"[CDPBrowserManager] Browser connection already closed: {browser_error}") |
| 487 | finally: |
| 488 | self.browser = None |
| 489 | |
| 490 | # Close browser process (skip if connected to existing browser - we didn't launch it) |
| 491 | if config.CDP_CONNECT_EXISTING: |
| 492 | utils.logger.info( |
| 493 | "[CDPBrowserManager] Connected to existing browser, skipping process cleanup" |
| 494 | ) |
no test coverage detected