seleniumbase 4.37.6__py3-none-any.whl → 4.37.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.37.6"
2
+ __version__ = "4.37.8"
@@ -546,12 +546,15 @@ def uc_open_with_cdp_mode(driver, url=None):
546
546
  headless = False
547
547
  headed = None
548
548
  xvfb = None
549
+ binary_location = None
549
550
  if hasattr(sb_config, "headless"):
550
551
  headless = sb_config.headless
551
552
  if hasattr(sb_config, "headed"):
552
553
  headed = sb_config.headed
553
554
  if hasattr(sb_config, "xvfb"):
554
555
  xvfb = sb_config.xvfb
556
+ if hasattr(sb_config, "binary_location"):
557
+ binary_location = sb_config.binary_location
555
558
 
556
559
  loop = asyncio.new_event_loop()
557
560
  asyncio.set_event_loop(loop)
@@ -562,6 +565,7 @@ def uc_open_with_cdp_mode(driver, url=None):
562
565
  headless=headless,
563
566
  headed=headed,
564
567
  xvfb=xvfb,
568
+ browser_executable_path=binary_location,
565
569
  )
566
570
  )
567
571
  loop.run_until_complete(driver.cdp_base.wait(0))
@@ -1234,7 +1234,8 @@ def SB(
1234
1234
  sb._has_failure = False # This may change
1235
1235
 
1236
1236
  with suppress(Exception):
1237
- stack_base = traceback.format_stack()[0].split(os.sep)[-1]
1237
+ stack_base = traceback.format_stack()[0].split("with SB(")[0]
1238
+ stack_base = stack_base.split(os.sep)[-1]
1238
1239
  test_base = stack_base.split(", in ")[0]
1239
1240
  filename = test_base.split('"')[0]
1240
1241
  methodname = ".line_" + test_base.split(", line ")[-1]
@@ -1251,7 +1252,8 @@ def SB(
1251
1252
  c1 = colorama.Fore.GREEN
1252
1253
  b1 = colorama.Style.BRIGHT
1253
1254
  cr = colorama.Style.RESET_ALL
1254
- stack_base = traceback.format_stack()[0].split(os.sep)[-1]
1255
+ stack_base = traceback.format_stack()[0].split("with SB(")[0]
1256
+ stack_base = stack_base.split(os.sep)[-1]
1255
1257
  test_name = stack_base.split(", in ")[0].replace('", line ', ":")
1256
1258
  test_name += ":SB"
1257
1259
  start_text = "=== {%s} starts ===" % test_name
@@ -46,9 +46,8 @@ def deconstruct_browser():
46
46
  logger.debug(
47
47
  "Problem removing data dir %s\n"
48
48
  "Consider checking whether it's there "
49
- "and remove it by hand\nerror: %s",
50
- _.config.user_data_dir,
51
- e,
49
+ "and remove it by hand\nerror: %s"
50
+ % (_.config.user_data_dir, e)
52
51
  )
53
52
  break
54
53
  time.sleep(0.15)
@@ -190,7 +189,7 @@ class Browser:
190
189
 
191
190
  sleep = wait
192
191
  """Alias for wait"""
193
- def _handle_target_update(
192
+ async def _handle_target_update(
194
193
  self,
195
194
  event: Union[
196
195
  cdp.target.TargetInfoChanged,
@@ -224,21 +223,21 @@ class Browser:
224
223
  current_tab.target = target_info
225
224
  elif isinstance(event, cdp.target.TargetCreated):
226
225
  target_info: cdp.target.TargetInfo = event.target_info
227
- from .tab import Tab
228
-
229
- new_target = Tab(
230
- (
231
- f"ws://{self.config.host}:{self.config.port}"
232
- f"/devtools/{target_info.type_ or 'page'}"
233
- f"/{target_info.target_id}"
234
- ),
235
- target=target_info,
236
- browser=self,
237
- )
238
- self.targets.append(new_target)
239
- logger.debug(
240
- "Target #%d created => %s", len(self.targets), new_target
226
+ websocket_url = (
227
+ f"ws://{self.config.host}:{self.config.port}"
228
+ f"/devtools/{target_info.type_ or 'page'}"
229
+ f"/{target_info.target_id}"
241
230
  )
231
+ async with tab.Tab(
232
+ websocket_url=websocket_url,
233
+ target=target_info,
234
+ browser=self
235
+ ) as new_target:
236
+ self.targets.append(new_target)
237
+ logger.debug(
238
+ "Target #%d created => %s"
239
+ % (len(self.targets), new_target)
240
+ )
242
241
  elif isinstance(event, cdp.target.TargetDestroyed):
243
242
  current_tab = next(
244
243
  filter(
@@ -287,10 +286,43 @@ class Browser:
287
286
  connection: tab.Tab = next(
288
287
  filter(lambda item: item.type_ == "page", self.targets)
289
288
  )
290
- # Use the tab to navigate to new url
289
+ _cdp_timezone = None
290
+ _cdp_user_agent = ""
291
+ _cdp_locale = None
292
+ _cdp_platform = None
293
+ _cdp_geolocation = None
294
+ if (
295
+ hasattr(sb_config, "_cdp_timezone") and sb_config._cdp_timezone
296
+ ):
297
+ _cdp_timezone = sb_config._cdp_timezone
298
+ if (
299
+ hasattr(sb_config, "_cdp_user_agent")
300
+ and sb_config._cdp_user_agent
301
+ ):
302
+ _cdp_user_agent = sb_config._cdp_user_agent
291
303
  if hasattr(sb_config, "_cdp_locale") and sb_config._cdp_locale:
304
+ _cdp_locale = sb_config._cdp_locale
305
+ if hasattr(sb_config, "_cdp_platform") and sb_config._cdp_platform:
306
+ _cdp_platform = sb_config._cdp_platform
307
+ if (
308
+ hasattr(sb_config, "_cdp_geolocation")
309
+ and sb_config._cdp_geolocation
310
+ ):
311
+ _cdp_geolocation = sb_config._cdp_geolocation
312
+ if _cdp_timezone:
313
+ await connection.send(cdp.page.navigate("about:blank"))
314
+ await connection.set_timezone(_cdp_timezone)
315
+ if _cdp_user_agent or _cdp_locale or _cdp_platform:
292
316
  await connection.send(cdp.page.navigate("about:blank"))
293
- await connection.set_locale(sb_config._cdp_locale)
317
+ await connection.set_user_agent(
318
+ user_agent=_cdp_user_agent,
319
+ accept_language=_cdp_locale,
320
+ platform=_cdp_platform,
321
+ )
322
+ if _cdp_geolocation:
323
+ await connection.send(cdp.page.navigate("about:blank"))
324
+ await connection.set_geolocation(_cdp_geolocation)
325
+ # Use the tab to navigate to new url
294
326
  frame_id, loader_id, *_ = await connection.send(
295
327
  cdp.page.navigate(url)
296
328
  )
@@ -323,8 +355,8 @@ class Browser:
323
355
  self.config.port = util.free_port()
324
356
  if not connect_existing:
325
357
  logger.debug(
326
- "BROWSER EXECUTABLE PATH: %s",
327
- self.config.browser_executable_path,
358
+ "BROWSER EXECUTABLE PATH: %s"
359
+ % self.config.browser_executable_path,
328
360
  )
329
361
  if not pathlib.Path(self.config.browser_executable_path).exists():
330
362
  raise FileNotFoundError(
@@ -729,10 +761,8 @@ class CookieJar:
729
761
  for cookie in cookies:
730
762
  for match in pattern.finditer(str(cookie.__dict__)):
731
763
  logger.debug(
732
- "Saved cookie for matching pattern '%s' => (%s: %s)",
733
- pattern.pattern,
734
- cookie.name,
735
- cookie.value,
764
+ "Saved cookie for matching pattern '%s' => (%s: %s)"
765
+ % (pattern.pattern, cookie.name, cookie.value)
736
766
  )
737
767
  included_cookies.append(cookie)
738
768
  break
@@ -769,10 +799,8 @@ class CookieJar:
769
799
  for match in pattern.finditer(str(cookie.__dict__)):
770
800
  included_cookies.append(cookie)
771
801
  logger.debug(
772
- "Loaded cookie for matching pattern '%s' => (%s: %s)",
773
- pattern.pattern,
774
- cookie.name,
775
- cookie.value,
802
+ "Loaded cookie for matching pattern '%s' => (%s: %s)"
803
+ % (pattern.pattern, cookie.name, cookie.value)
776
804
  )
777
805
  break
778
806
  await connection.send(cdp.network.set_cookies(included_cookies))
@@ -10,8 +10,10 @@ import types
10
10
  import typing
11
11
  from contextlib import suppress
12
12
  from seleniumbase import config as sb_config
13
+ from seleniumbase import extensions
13
14
  from seleniumbase.config import settings
14
15
  from seleniumbase.core import detect_b_ver
16
+ from seleniumbase.core import download_helper
15
17
  from seleniumbase.core import proxy_helper
16
18
  from seleniumbase.fixtures import constants
17
19
  from seleniumbase.fixtures import shared_utils
@@ -25,7 +27,10 @@ import mycdp as cdp
25
27
 
26
28
  logger = logging.getLogger(__name__)
27
29
  IS_LINUX = shared_utils.is_linux()
30
+ DOWNLOADS_FOLDER = download_helper.get_downloads_folder()
28
31
  PROXY_DIR_LOCK = proxy_helper.PROXY_DIR_LOCK
32
+ EXTENSIONS_DIR = os.path.dirname(os.path.realpath(extensions.__file__))
33
+ AD_BLOCK_ZIP_PATH = os.path.join(EXTENSIONS_DIR, "ad_block.zip")
29
34
  T = typing.TypeVar("T")
30
35
 
31
36
 
@@ -168,6 +173,19 @@ def __add_chrome_ext_dir(extension_dir, dir_path):
168
173
  return extension_dir
169
174
 
170
175
 
176
+ def __unzip_to_new_folder(zip_file, folder):
177
+ proxy_dir_lock = fasteners.InterProcessLock(PROXY_DIR_LOCK)
178
+ with proxy_dir_lock:
179
+ with suppress(Exception):
180
+ shared_utils.make_writable(PROXY_DIR_LOCK)
181
+ if not os.path.exists(folder):
182
+ import zipfile
183
+ zip_ref = zipfile.ZipFile(zip_file, "r")
184
+ os.makedirs(folder)
185
+ zip_ref.extractall(folder)
186
+ zip_ref.close()
187
+
188
+
171
189
  def __add_chrome_proxy_extension(
172
190
  extension_dir,
173
191
  proxy_string,
@@ -231,6 +249,7 @@ async def start(
231
249
  browser_executable_path: Optional[PathLike] = None,
232
250
  browser_args: Optional[List[str]] = None,
233
251
  xvfb_metrics: Optional[List[str]] = None, # "Width,Height" for Linux
252
+ ad_block: Optional[bool] = False,
234
253
  sandbox: Optional[bool] = True,
235
254
  lang: Optional[str] = None, # Set the Language Locale Code
236
255
  host: Optional[str] = None, # Chrome remote-debugging-host
@@ -238,7 +257,10 @@ async def start(
238
257
  xvfb: Optional[int] = None, # Use a special virtual display on Linux
239
258
  headed: Optional[bool] = None, # Override default Xvfb mode on Linux
240
259
  expert: Optional[bool] = None, # Open up closed Shadow-root elements
260
+ agent: Optional[str] = None, # Set the user-agent string
241
261
  proxy: Optional[str] = None, # "host:port" or "user:pass@host:port"
262
+ tzone: Optional[str] = None, # Eg "America/New_York", "Asia/Kolkata"
263
+ geoloc: Optional[list | tuple] = None, # Eg (48.87645, 2.26340)
242
264
  extension_dir: Optional[str] = None, # Chrome extension directory
243
265
  **kwargs: Optional[dict],
244
266
  ) -> Browser:
@@ -296,6 +318,18 @@ async def start(
296
318
  proxy_user,
297
319
  proxy_pass,
298
320
  )
321
+ if ad_block:
322
+ incognito = False
323
+ guest = False
324
+ ad_block_zip = AD_BLOCK_ZIP_PATH
325
+ ad_block_dir = os.path.join(DOWNLOADS_FOLDER, "ad_block")
326
+ __unzip_to_new_folder(ad_block_zip, ad_block_dir)
327
+ extension_dir = __add_chrome_ext_dir(extension_dir, ad_block_dir)
328
+ if (
329
+ "binary_location" in kwargs
330
+ and not browser_executable_path
331
+ ):
332
+ browser_executable_path = kwargs["binary_location"]
299
333
  if not config:
300
334
  config = Config(
301
335
  user_data_dir,
@@ -329,6 +363,26 @@ async def start(
329
363
  sb_config._cdp_locale = kwargs["locale_code"]
330
364
  else:
331
365
  sb_config._cdp_locale = None
366
+ if tzone:
367
+ sb_config._cdp_timezone = tzone
368
+ elif "timezone" in kwargs:
369
+ sb_config._cdp_timezone = kwargs["timezone"]
370
+ else:
371
+ sb_config._cdp_timezone = None
372
+ if geoloc:
373
+ sb_config._cdp_geolocation = geoloc
374
+ elif "geolocation" in kwargs:
375
+ sb_config._cdp_geolocation = kwargs["geolocation"]
376
+ else:
377
+ sb_config._cdp_geolocation = None
378
+ if agent:
379
+ sb_config._cdp_user_agent = agent
380
+ elif "user_agent" in kwargs:
381
+ sb_config._cdp_user_agent = kwargs["user_agent"]
382
+ else:
383
+ sb_config._cdp_user_agent = None
384
+ if "platform" in kwargs:
385
+ sb_config._cdp_platform = kwargs["platform"]
332
386
  return driver
333
387
 
334
388
 
@@ -348,7 +348,37 @@ class Connection(metaclass=CantTouchThis):
348
348
 
349
349
  async def set_locale(self, locale: Optional[str] = None):
350
350
  """Sets the Language Locale code via set_user_agent_override."""
351
- await self.send(cdp.network.set_user_agent_override("", locale))
351
+ await self.set_user_agent(user_agent="", accept_language=locale)
352
+
353
+ async def set_timezone(self, timezone: Optional[str] = None):
354
+ """Sets the Timezone via set_timezone_override."""
355
+ await self.send(cdp.emulation.set_timezone_override(timezone))
356
+
357
+ async def set_user_agent(
358
+ self,
359
+ user_agent: Optional[str] = "",
360
+ accept_language: Optional[str] = None,
361
+ platform: Optional[str] = None, # navigator.platform
362
+ ):
363
+ """Sets the User Agent via set_user_agent_override."""
364
+ if not user_agent:
365
+ user_agent = ""
366
+ await self.send(cdp.network.set_user_agent_override(
367
+ user_agent=user_agent,
368
+ accept_language=accept_language,
369
+ platform=platform,
370
+ ))
371
+
372
+ async def set_geolocation(self, geolocation: Optional[tuple] = None):
373
+ """Sets the User Agent via set_geolocation_override."""
374
+ await self.send(cdp.browser.grant_permissions(
375
+ permissions=["geolocation"],
376
+ ))
377
+ await self.send(cdp.emulation.set_geolocation_override(
378
+ latitude=geolocation[0],
379
+ longitude=geolocation[1],
380
+ accuracy=100,
381
+ ))
352
382
 
353
383
  def __getattr__(self, item):
354
384
  """:meta private:"""
@@ -6,6 +6,7 @@ import logging
6
6
  import pathlib
7
7
  import urllib.parse
8
8
  import warnings
9
+ from seleniumbase import config as sb_config
9
10
  from typing import Dict, List, Union, Optional, Tuple
10
11
  from . import browser as cdp_browser
11
12
  from . import element
@@ -137,6 +138,14 @@ class Tab(Connection):
137
138
  self._dom = None
138
139
  self._window_id = None
139
140
 
141
+ async def __aenter__(self):
142
+ return self
143
+
144
+ async def __aexit__(self, exc_type, exc_val, exc_tb):
145
+ await self.aclose()
146
+ if exc_type and exc_val:
147
+ raise exc_type(exc_val)
148
+
140
149
  @property
141
150
  def inspector_url(self):
142
151
  """
@@ -348,7 +357,12 @@ class Tab(Connection):
348
357
  if new_window and not new_tab:
349
358
  new_tab = True
350
359
  if new_tab:
351
- return await self.browser.get(url, new_tab, new_window)
360
+ if hasattr(sb_config, "incognito") and sb_config.incognito:
361
+ return await self.browser.get(
362
+ url, new_tab=False, new_window=True
363
+ )
364
+ else:
365
+ return await self.browser.get(url, new_tab, new_window)
352
366
  else:
353
367
  frame_id, loader_id, *_ = await self.send(cdp.page.navigate(url))
354
368
  await self
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.37.6
3
+ Version: 4.37.8
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -59,20 +59,21 @@ Classifier: Topic :: Utilities
59
59
  Requires-Python: >=3.8
60
60
  Description-Content-Type: text/markdown
61
61
  License-File: LICENSE
62
- Requires-Dist: pip>=25.0.1
62
+ Requires-Dist: pip>=25.0.1; python_version < "3.9"
63
+ Requires-Dist: pip>=25.1; python_version >= "3.9"
63
64
  Requires-Dist: packaging>=25.0
64
65
  Requires-Dist: setuptools~=70.2; python_version < "3.10"
65
- Requires-Dist: setuptools>=79.0.0; python_version >= "3.10"
66
+ Requires-Dist: setuptools>=80.0.0; python_version >= "3.10"
66
67
  Requires-Dist: wheel>=0.45.1
67
68
  Requires-Dist: attrs>=25.3.0
68
- Requires-Dist: certifi>=2025.1.31
69
+ Requires-Dist: certifi>=2025.4.26
69
70
  Requires-Dist: exceptiongroup>=1.2.2
70
71
  Requires-Dist: websockets~=13.1; python_version < "3.9"
71
72
  Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
72
73
  Requires-Dist: filelock~=3.16.1; python_version < "3.9"
73
74
  Requires-Dist: filelock>=3.18.0; python_version >= "3.9"
74
75
  Requires-Dist: fasteners>=0.19
75
- Requires-Dist: mycdp>=1.1.1
76
+ Requires-Dist: mycdp>=1.2.0
76
77
  Requires-Dist: pynose>=1.5.4
77
78
  Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
78
79
  Requires-Dist: platformdirs>=4.3.7; python_version >= "3.9"
@@ -97,7 +98,7 @@ Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
97
98
  Requires-Dist: urllib3<2.5.0,>=1.26.20; python_version >= "3.10"
98
99
  Requires-Dist: requests==2.32.3
99
100
  Requires-Dist: sniffio==1.3.1
100
- Requires-Dist: h11==0.14.0
101
+ Requires-Dist: h11==0.16.0
101
102
  Requires-Dist: outcome==1.3.0.post0
102
103
  Requires-Dist: trio==0.27.0; python_version < "3.9"
103
104
  Requires-Dist: trio==0.30.0; python_version >= "3.9"
@@ -3,7 +3,7 @@ sbase/__main__.py,sha256=G0bVB1-DM4PGwQ1KyOupaWCs4ePbChZNNWuX2htim5U,647
3
3
  sbase/steps.py,sha256=_WvAjydKqZfTdnZW9LPKkRty-g-lfdUPmLqnZj6ulcs,43013
4
4
  seleniumbase/__init__.py,sha256=JFEY9P5QJqsa1M6ghzLMH2eIPQyh85iglCaQwg8Y8z4,2498
5
5
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
6
- seleniumbase/__version__.py,sha256=j6IWHJ5BuCD8TKZmHtP39X9QEfRHPBiTjLgwDLkKNjQ,46
6
+ seleniumbase/__version__.py,sha256=V58urCObAfon7OXV-6PlzXfY_nvnJAlueUECpoey6BA,46
7
7
  seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
8
8
  seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
9
9
  seleniumbase/behave/behave_sb.py,sha256=qQF85LoohJBfrPK5ZcPi50v-pWtOrC9qcN1B3Ki_3tY,59401
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0C
36
36
  seleniumbase/console_scripts/sb_recorder.py,sha256=fnHb5-kh11Hit-E9Ha-e4QXzqLcZvtij6mb5qNd4B1Q,11032
37
37
  seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
38
38
  seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
39
- seleniumbase/core/browser_launcher.py,sha256=H8CVjbO6M43op-sCNakek8NYBdZnc3FC1ekGtj-I6oI,239787
39
+ seleniumbase/core/browser_launcher.py,sha256=Jy-F1k45yxSW4-Io403zEOgoGgZg2ZLsHLYSh7VTKgs,239965
40
40
  seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
41
41
  seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
42
42
  seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
@@ -90,7 +90,7 @@ seleniumbase/plugins/driver_manager.py,sha256=1l4fxISvGV62gfDxp3yfYE2zz4WKJFLE0t
90
90
  seleniumbase/plugins/page_source.py,sha256=loTnXxOj4kxEukuTZEiGyvKBhY3KDVDMnNlHHheTBDE,1889
91
91
  seleniumbase/plugins/pytest_plugin.py,sha256=952AIyaH-PdmNksoeXjzhXxoc8Z53yV-WPjlrHhp2OM,108382
92
92
  seleniumbase/plugins/s3_logging_plugin.py,sha256=WDfertQgGOW_SRJpFMaekYD6vBVW9VO62POtXXy2HCM,2319
93
- seleniumbase/plugins/sb_manager.py,sha256=IMUACNzz3Jz0F8YNr6MzX3nO_cEG9YQVzXc8X6PNiZY,57530
93
+ seleniumbase/plugins/sb_manager.py,sha256=LkqdnOUAVY0d6Pa2k0jRHGtLkMUTrM5-2FF5nqnORtY,57636
94
94
  seleniumbase/plugins/screen_shots.py,sha256=1hrXw-hzuZ1BR6Yh7AyWX2ABnvnP73-RCbwdz958gj4,1127
95
95
  seleniumbase/plugins/selenium_plugin.py,sha256=y0eNco8T4KgGLProLPHPLw479QH5lRms4wqwOnTgkSc,60081
96
96
  seleniumbase/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -115,12 +115,12 @@ seleniumbase/undetected/reactor.py,sha256=NropaXcO54pzmDq6quR27qPJxab6636H7LRAaq
115
115
  seleniumbase/undetected/webelement.py,sha256=OOpUYbEiOG52KsYYyuDW9tYLdA2SMnukvwQHUdPVn9E,1389
116
116
  seleniumbase/undetected/cdp_driver/__init__.py,sha256=Ga9alwuaZZy4_XOShc0HjgFnNqpPdrcbjAicz5gE7a4,215
117
117
  seleniumbase/undetected/cdp_driver/_contradict.py,sha256=lP4b0h5quAy573ETn_TBbYV889cL1AuPLVInpJ0ZkiU,3183
118
- seleniumbase/undetected/cdp_driver/browser.py,sha256=c-9EWqpD2ZtpDg8edMuw9hYa6GuyOP1qxorNjtsWe1U,30457
119
- seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=oKUEHx220PEFvHLW4dz18i4j1Q6HPTdkKx9QOKAVZ3I,21821
118
+ seleniumbase/undetected/cdp_driver/browser.py,sha256=zhdHeUDXsJpLzLS72SLT-cAdrU1Tf4TE4prQN-wpdC0,31905
119
+ seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=3DhxoMwn0kXCz0QBYKEzLlyrztYeu-2HkyVCmg6sq64,23964
120
120
  seleniumbase/undetected/cdp_driver/config.py,sha256=t8KV1Vqa5SQRBq3-gjkHHmj9h85AplAM01asO3AWufs,12507
121
- seleniumbase/undetected/cdp_driver/connection.py,sha256=5A2RytIpQJtKGwdp4bayazZzhwhaRChrAmm7c4XQhhM,23421
121
+ seleniumbase/undetected/cdp_driver/connection.py,sha256=jccGcDt-TqgknvMNQYpRbhrSMC_74tYs-9YH1NK5UGU,24572
122
122
  seleniumbase/undetected/cdp_driver/element.py,sha256=FIC6v7OmumLCT-_vIc3H4oju_oBbaLpWJUJIKm2c_q4,40467
123
- seleniumbase/undetected/cdp_driver/tab.py,sha256=bxkCFKDejQ1xKsX3740RvvrYfC4OBv1mlQ4yWJM6As4,52260
123
+ seleniumbase/undetected/cdp_driver/tab.py,sha256=7zyOFczrRHY-kQhUSl8--luKr4ZMG7F7yzXzeC-WXqY,52743
124
124
  seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
125
125
  seleniumbase/utilities/selenium_grid/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
126
126
  seleniumbase/utilities/selenium_grid/download_selenium_server.py,sha256=ZdoInIbhtmdKCIPxxtJHhd2sqotqcNXWMYbwWrkh9O0,1727
@@ -135,9 +135,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.bat,sha256=Ftq-GrAKRYH2ssDPr
135
135
  seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443QFK8PryBpDmKn5Gy0s4o0vDSM,106
136
136
  seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
137
137
  seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
138
- seleniumbase-4.37.6.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
139
- seleniumbase-4.37.6.dist-info/METADATA,sha256=91W_Xk9QI52W1oUzoytLWDMmyGvkKgdJ1HYOnDMtRjQ,86879
140
- seleniumbase-4.37.6.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
141
- seleniumbase-4.37.6.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
- seleniumbase-4.37.6.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
- seleniumbase-4.37.6.dist-info/RECORD,,
138
+ seleniumbase-4.37.8.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
139
+ seleniumbase-4.37.8.dist-info/METADATA,sha256=fQ_267nDHyMhbJU6z1QsU6ZIpt0RLAnDkcS7CpRIJiw,86953
140
+ seleniumbase-4.37.8.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
141
+ seleniumbase-4.37.8.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
142
+ seleniumbase-4.37.8.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
143
+ seleniumbase-4.37.8.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.0)
2
+ Generator: setuptools (80.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5