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.
- seleniumbase/__version__.py +1 -1
- seleniumbase/core/browser_launcher.py +4 -0
- seleniumbase/plugins/sb_manager.py +4 -2
- seleniumbase/undetected/cdp_driver/browser.py +58 -30
- seleniumbase/undetected/cdp_driver/cdp_util.py +54 -0
- seleniumbase/undetected/cdp_driver/connection.py +31 -1
- seleniumbase/undetected/cdp_driver/tab.py +15 -1
- {seleniumbase-4.37.6.dist-info → seleniumbase-4.37.8.dist-info}/METADATA +7 -6
- {seleniumbase-4.37.6.dist-info → seleniumbase-4.37.8.dist-info}/RECORD +13 -13
- {seleniumbase-4.37.6.dist-info → seleniumbase-4.37.8.dist-info}/WHEEL +1 -1
- {seleniumbase-4.37.6.dist-info → seleniumbase-4.37.8.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.37.6.dist-info → seleniumbase-4.37.8.dist-info}/licenses/LICENSE +0 -0
- {seleniumbase-4.37.6.dist-info → seleniumbase-4.37.8.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.37.
|
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(
|
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(
|
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
|
-
|
228
|
-
|
229
|
-
|
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
|
-
|
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.
|
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.
|
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
|
-
|
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.
|
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>=
|
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.
|
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.
|
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.
|
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=
|
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=
|
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=
|
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=
|
119
|
-
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=
|
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=
|
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=
|
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.
|
139
|
-
seleniumbase-4.37.
|
140
|
-
seleniumbase-4.37.
|
141
|
-
seleniumbase-4.37.
|
142
|
-
seleniumbase-4.37.
|
143
|
-
seleniumbase-4.37.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|