@@ -48,7 +48,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
4848< dl >
4949< dt id ="scrapfly.browser_config.BrowserConfig "> < code class ="flex name class ">
5050< span > class < span class ="ident "> BrowserConfig</ span > </ span >
51- < span > (</ span > < span > proxy_pool: str | < a title ="scrapfly.browser_config.ProxyPool " href ="#scrapfly.browser_config.ProxyPool "> ProxyPool</ a > | None = None,< br > os: str | < a title ="scrapfly.browser_config.OperatingSystem " href ="#scrapfly.browser_config.OperatingSystem "> OperatingSystem</ a > | None = None,< br > session: str | None = None,< br > country: str | None = None,< br > auto_close: bool | None = None,< br > timeout: int | None = None,< br > debug: bool | None = None,< br > extensions: List[str] | None = None,< br > block_images: bool | None = None,< br > block_styles: bool | None = None,< br > block_fonts: bool | None = None,< br > block_media: bool | None = None,< br > screenshot: bool | None = None,< br > resolution: str | None = None,< br > target_url: str | None = None,< br > cache: bool | None = None,< br > blacklist: bool | None = None,< br > unblock: bool | None = None,< br > unblock_timeout: int | None = None,< br > browser_brand: str | None = None,< br > byop_proxy: str | None = None,< br > enable_mcp: bool | None = None)</ span >
51+ < span > (</ span > < span > proxy_pool: str | < a title ="scrapfly.browser_config.ProxyPool " href ="#scrapfly.browser_config.ProxyPool "> ProxyPool</ a > | None = None,< br > os: str | < a title ="scrapfly.browser_config.OperatingSystem " href ="#scrapfly.browser_config.OperatingSystem "> OperatingSystem</ a > | None = None,< br > session: str | None = None,< br > country: str | None = None,< br > auto_close: bool | None = None,< br > timeout: int | None = None,< br > debug: bool | None = None,< br > extensions: List[str] | None = None,< br > block_images: bool | None = None,< br > block_styles: bool | None = None,< br > block_fonts: bool | None = None,< br > block_media: bool | None = None,< br > screenshot: bool | None = None,< br > resolution: str | None = None,< br > target_url: str | None = None,< br > cache: bool | None = None,< br > blacklist: bool | None = None,< br > unblock: bool | None = None,< br > unblock_timeout: int | None = None,< br > browser_brand: str | None = None,< br > byop_proxy: str | None = None,< br > enable_mcp: bool | None = None,< br > solve_captcha: bool | None = None)</ span >
5252</ code > </ dt >
5353< dd >
5454< details class ="source ">
@@ -83,6 +83,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
8383 browser_brand: Optional[str] = None,
8484 byop_proxy: Optional[str] = None,
8585 enable_mcp: Optional[bool] = None,
86+ solve_captcha: Optional[bool] = None,
8687 ):
8788 if timeout is not None and timeout > 1800:
8889 raise ValueError('timeout cannot exceed 1800 seconds (30 minutes)')
@@ -122,6 +123,12 @@ <h2 class="section-title" id="header-classes">Classes</h2>
122123 # https://scrapfly.io/docs/cloud-browser-api/byop
123124 self.byop_proxy = byop_proxy
124125 self.enable_mcp = enable_mcp
126+ # SolveCaptcha: arm Scrapium's built-in captcha detector + solver on
127+ # the first page attach. Turnstile, DataDome slider, reCAPTCHA,
128+ # GeeTest, PerimeterX hold, and puzzle captchas are handled
129+ # automatically. Billed per solve; failures cost nothing.
130+ # https://scrapfly.io/docs/cloud-browser-api/captcha-solver
131+ self.solve_captcha = solve_captcha
125132
126133 def websocket_url(self, api_key: str, host: Optional[str] = None) -> str:
127134 params = {'api_key': api_key}
@@ -192,6 +199,9 @@ <h2 class="section-title" id="header-classes">Classes</h2>
192199 if self.enable_mcp is not None:
193200 params['enable_mcp'] = self._bool_to_http(self.enable_mcp)
194201
202+ if self.solve_captcha is not None:
203+ params['solve_captcha'] = self._bool_to_http(self.solve_captcha)
204+
195205 base_host = host or self.CLOUD_BROWSER_HOST
196206 return base_host + '?' + urlencode(params)
197207
@@ -219,6 +229,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
219229 'browser_brand': self.browser_brand,
220230 'byop_proxy': self.byop_proxy,
221231 'enable_mcp': self.enable_mcp,
232+ 'solve_captcha': self.solve_captcha,
222233 }
223234
224235 @staticmethod
@@ -254,6 +265,7 @@ <h2 class="section-title" id="header-classes">Classes</h2>
254265 browser_brand=browser_config_dict.get('browser_brand', None),
255266 byop_proxy=browser_config_dict.get('byop_proxy', None),
256267 enable_mcp=browser_config_dict.get('enable_mcp', None),
268+ solve_captcha=browser_config_dict.get('solve_captcha', None),
257269 )</ code > </ pre >
258270</ details >
259271< div class ="desc "> </ div >
@@ -311,6 +323,7 @@ <h3>Static methods</h3>
311323 browser_brand=browser_config_dict.get('browser_brand', None),
312324 byop_proxy=browser_config_dict.get('byop_proxy', None),
313325 enable_mcp=browser_config_dict.get('enable_mcp', None),
326+ solve_captcha=browser_config_dict.get('solve_captcha', None),
314327 )</ code > </ pre >
315328</ details >
316329< div class ="desc "> </ div >
@@ -350,6 +363,7 @@ <h3>Methods</h3>
350363 'browser_brand': self.browser_brand,
351364 'byop_proxy': self.byop_proxy,
352365 'enable_mcp': self.enable_mcp,
366+ 'solve_captcha': self.solve_captcha,
353367 }</ code > </ pre >
354368</ details >
355369< div class ="desc "> </ div >
@@ -431,6 +445,9 @@ <h3>Methods</h3>
431445 if self.enable_mcp is not None:
432446 params['enable_mcp'] = self._bool_to_http(self.enable_mcp)
433447
448+ if self.solve_captcha is not None:
449+ params['solve_captcha'] = self._bool_to_http(self.solve_captcha)
450+
434451 base_host = host or self.CLOUD_BROWSER_HOST
435452 return base_host + '?' + urlencode(params)</ code > </ pre >
436453</ details >
0 commit comments