| 98 | self.captured_ws_endpoint = None |
| 99 | |
| 100 | def start( |
| 101 | self, |
| 102 | final_launch_mode, |
| 103 | effective_active_auth_json_path, |
| 104 | simulated_os_for_camoufox, |
| 105 | args, |
| 106 | ): |
| 107 | # Build Camoufox internal launch command (from dev) |
| 108 | camoufox_internal_cmd_args = build_launch_command( |
| 109 | final_launch_mode, |
| 110 | effective_active_auth_json_path, |
| 111 | simulated_os_for_camoufox, |
| 112 | args.camoufox_debug_port, |
| 113 | args.internal_camoufox_proxy, |
| 114 | ) |
| 115 | |
| 116 | camoufox_popen_kwargs = { |
| 117 | "stdout": subprocess.PIPE, |
| 118 | "stderr": subprocess.PIPE, |
| 119 | "env": os.environ.copy(), |
| 120 | } |
| 121 | camoufox_popen_kwargs["env"]["PYTHONIOENCODING"] = "utf-8" |
| 122 | if sys.platform != "win32" and final_launch_mode != "debug": |
| 123 | camoufox_popen_kwargs["start_new_session"] = True |
| 124 | elif sys.platform == "win32" and ( |
| 125 | final_launch_mode == "headless" or final_launch_mode == "virtual_headless" |
| 126 | ): |
| 127 | camoufox_popen_kwargs["creationflags"] = subprocess.CREATE_NO_WINDOW |
| 128 | |
| 129 | try: |
| 130 | logger.debug( |
| 131 | f"Executing Camoufox internal launch command: {' '.join(camoufox_internal_cmd_args)}" |
| 132 | ) |
| 133 | self.camoufox_proc = subprocess.Popen( |
| 134 | camoufox_internal_cmd_args, **camoufox_popen_kwargs |
| 135 | ) |
| 136 | logger.info( |
| 137 | f"Camoufox internal process started (PID: {self.camoufox_proc.pid}). Waiting for WebSocket endpoint output (max {ENDPOINT_CAPTURE_TIMEOUT} seconds)..." |
| 138 | ) |
| 139 | |
| 140 | camoufox_output_q = queue.Queue() |
| 141 | camoufox_stdout_reader = threading.Thread( |
| 142 | target=_enqueue_output, |
| 143 | args=( |
| 144 | self.camoufox_proc.stdout, |
| 145 | "stdout", |
| 146 | camoufox_output_q, |
| 147 | self.camoufox_proc.pid, |
| 148 | ), |
| 149 | daemon=True, |
| 150 | ) |
| 151 | camoufox_stderr_reader = threading.Thread( |
| 152 | target=_enqueue_output, |
| 153 | args=( |
| 154 | self.camoufox_proc.stderr, |
| 155 | "stderr", |
| 156 | camoufox_output_q, |
| 157 | self.camoufox_proc.pid, |