seleniumbase 4.39.3__py3-none-any.whl → 4.39.6__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 +15 -0
- seleniumbase/core/sb_cdp.py +45 -12
- seleniumbase/fixtures/base_case.py +13 -1
- seleniumbase/undetected/cdp_driver/browser.py +43 -7
- seleniumbase/undetected/cdp_driver/cdp_util.py +13 -1
- {seleniumbase-4.39.3.dist-info → seleniumbase-4.39.6.dist-info}/METADATA +14 -13
- {seleniumbase-4.39.3.dist-info → seleniumbase-4.39.6.dist-info}/RECORD +12 -12
- {seleniumbase-4.39.3.dist-info → seleniumbase-4.39.6.dist-info}/WHEEL +0 -0
- {seleniumbase-4.39.3.dist-info → seleniumbase-4.39.6.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.39.3.dist-info → seleniumbase-4.39.6.dist-info}/licenses/LICENSE +0 -0
- {seleniumbase-4.39.3.dist-info → seleniumbase-4.39.6.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.39.
|
2
|
+
__version__ = "4.39.6"
|
@@ -532,6 +532,7 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
|
|
532
532
|
|
533
533
|
|
534
534
|
def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
535
|
+
"""Activate CDP Mode with the URL and kwargs."""
|
535
536
|
import asyncio
|
536
537
|
from seleniumbase.undetected.cdp_driver import cdp_util
|
537
538
|
|
@@ -579,6 +580,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
579
580
|
headless = False
|
580
581
|
headed = None
|
581
582
|
xvfb = None
|
583
|
+
xvfb_metrics = None
|
582
584
|
binary_location = None
|
583
585
|
if hasattr(sb_config, "headless"):
|
584
586
|
headless = sb_config.headless
|
@@ -586,6 +588,8 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
586
588
|
headed = sb_config.headed
|
587
589
|
if hasattr(sb_config, "xvfb"):
|
588
590
|
xvfb = sb_config.xvfb
|
591
|
+
if hasattr(sb_config, "xvfb_metrics"):
|
592
|
+
xvfb_metrics = sb_config.xvfb_metrics
|
589
593
|
if hasattr(sb_config, "binary_location"):
|
590
594
|
binary_location = sb_config.binary_location
|
591
595
|
|
@@ -598,6 +602,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
598
602
|
headless=headless,
|
599
603
|
headed=headed,
|
600
604
|
xvfb=xvfb,
|
605
|
+
xvfb_metrics=xvfb_metrics,
|
601
606
|
browser_executable_path=binary_location,
|
602
607
|
)
|
603
608
|
)
|
@@ -679,6 +684,9 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
|
|
679
684
|
cdp.go_forward = CDPM.go_forward
|
680
685
|
cdp.get_navigation_history = CDPM.get_navigation_history
|
681
686
|
cdp.tile_windows = CDPM.tile_windows
|
687
|
+
cdp.grant_permissions = CDPM.grant_permissions
|
688
|
+
cdp.grant_all_permissions = CDPM.grant_all_permissions
|
689
|
+
cdp.reset_permissions = CDPM.reset_permissions
|
682
690
|
cdp.get_all_cookies = CDPM.get_all_cookies
|
683
691
|
cdp.set_all_cookies = CDPM.set_all_cookies
|
684
692
|
cdp.save_cookies = CDPM.save_cookies
|
@@ -959,6 +967,11 @@ def __install_pyautogui_if_missing():
|
|
959
967
|
backend="xvfb",
|
960
968
|
use_xauth=True,
|
961
969
|
)
|
970
|
+
if "--debug-display" in sys.argv:
|
971
|
+
print(
|
972
|
+
"Starting VDisplay from browser_launcher: (%s, %s)"
|
973
|
+
% (xvfb_width, xvfb_height)
|
974
|
+
)
|
962
975
|
_xvfb_display.start()
|
963
976
|
sb_config._virtual_display = _xvfb_display
|
964
977
|
sb_config.headless_active = True
|
@@ -2144,6 +2157,7 @@ def _set_chrome_options(
|
|
2144
2157
|
prefs["download.prompt_for_download"] = False
|
2145
2158
|
prefs["download_bubble.partial_view_enabled"] = False
|
2146
2159
|
prefs["credentials_enable_service"] = False
|
2160
|
+
prefs["autofill.credit_card_enabled"] = False
|
2147
2161
|
prefs["local_discovery.notifications_enabled"] = False
|
2148
2162
|
prefs["safebrowsing.enabled"] = False # Prevent PW "data breach" pop-ups
|
2149
2163
|
prefs["safebrowsing.disable_download_protection"] = True
|
@@ -4002,6 +4016,7 @@ def get_local_driver(
|
|
4002
4016
|
"download.directory_upgrade": True,
|
4003
4017
|
"download.prompt_for_download": False,
|
4004
4018
|
"credentials_enable_service": False,
|
4019
|
+
"autofill.credit_card_enabled": False,
|
4005
4020
|
"local_discovery.notifications_enabled": False,
|
4006
4021
|
"safebrowsing.disable_download_protection": True,
|
4007
4022
|
"safebrowsing.enabled": False, # Prevent PW "data breach" pop-ups
|
seleniumbase/core/sb_cdp.py
CHANGED
@@ -645,6 +645,30 @@ class CDPMethods():
|
|
645
645
|
driver.tile_windows(windows, max_columns)
|
646
646
|
)
|
647
647
|
|
648
|
+
def grant_permissions(self, permissions, origin=None):
|
649
|
+
"""Grant specific permissions to the current window.
|
650
|
+
Applies to all origins if no origin is specified."""
|
651
|
+
driver = self.driver
|
652
|
+
if hasattr(driver, "cdp_base"):
|
653
|
+
driver = driver.cdp_base
|
654
|
+
return self.loop.run_until_complete(
|
655
|
+
driver.grant_permissions(permissions, origin)
|
656
|
+
)
|
657
|
+
|
658
|
+
def grant_all_permissions(self):
|
659
|
+
"""Grant all permissions to the current window for all origins."""
|
660
|
+
driver = self.driver
|
661
|
+
if hasattr(driver, "cdp_base"):
|
662
|
+
driver = driver.cdp_base
|
663
|
+
return self.loop.run_until_complete(driver.grant_all_permissions())
|
664
|
+
|
665
|
+
def reset_permissions(self):
|
666
|
+
"""Reset permissions for all origins on the current window."""
|
667
|
+
driver = self.driver
|
668
|
+
if hasattr(driver, "cdp_base"):
|
669
|
+
driver = driver.cdp_base
|
670
|
+
return self.loop.run_until_complete(driver.reset_permissions())
|
671
|
+
|
648
672
|
def get_all_cookies(self, *args, **kwargs):
|
649
673
|
driver = self.driver
|
650
674
|
if hasattr(driver, "cdp_base"):
|
@@ -681,9 +705,7 @@ class CDPMethods():
|
|
681
705
|
driver = self.driver
|
682
706
|
if hasattr(driver, "cdp_base"):
|
683
707
|
driver = driver.cdp_base
|
684
|
-
return self.loop.run_until_complete(
|
685
|
-
driver.cookies.clear()
|
686
|
-
)
|
708
|
+
return self.loop.run_until_complete(driver.cookies.clear())
|
687
709
|
|
688
710
|
def sleep(self, seconds):
|
689
711
|
time.sleep(seconds)
|
@@ -702,9 +724,7 @@ class CDPMethods():
|
|
702
724
|
|
703
725
|
js_code = active_css_js.get_active_element_css
|
704
726
|
js_code = js_code.replace("return getBestSelector", "getBestSelector")
|
705
|
-
return self.loop.run_until_complete(
|
706
|
-
self.page.evaluate(js_code)
|
707
|
-
)
|
727
|
+
return self.loop.run_until_complete(self.page.evaluate(js_code))
|
708
728
|
|
709
729
|
def click(self, selector, timeout=None):
|
710
730
|
if not timeout:
|
@@ -978,17 +998,13 @@ class CDPMethods():
|
|
978
998
|
"\n".join(exp_list[0:-1]) + "\n"
|
979
999
|
+ exp_list[-1].strip()[len("return "):]
|
980
1000
|
).strip()
|
981
|
-
return self.loop.run_until_complete(
|
982
|
-
self.page.evaluate(expression)
|
983
|
-
)
|
1001
|
+
return self.loop.run_until_complete(self.page.evaluate(expression))
|
984
1002
|
|
985
1003
|
def js_dumps(self, obj_name):
|
986
1004
|
"""Similar to evaluate(), but for dictionary results."""
|
987
1005
|
if obj_name.startswith("return "):
|
988
1006
|
obj_name = obj_name[len("return "):]
|
989
|
-
return self.loop.run_until_complete(
|
990
|
-
self.page.js_dumps(obj_name)
|
991
|
-
)
|
1007
|
+
return self.loop.run_until_complete(self.page.js_dumps(obj_name))
|
992
1008
|
|
993
1009
|
def maximize(self):
|
994
1010
|
if self.get_window()[1].window_state.value == "maximized":
|
@@ -1309,6 +1325,8 @@ class CDPMethods():
|
|
1309
1325
|
)
|
1310
1326
|
|
1311
1327
|
def get_element_attribute(self, selector, attribute):
|
1328
|
+
"""Find an element and return the value of an attribute.
|
1329
|
+
Raises an exception if there's no such element or attribute."""
|
1312
1330
|
attributes = self.get_element_attributes(selector)
|
1313
1331
|
with suppress(Exception):
|
1314
1332
|
return attributes[attribute]
|
@@ -1319,10 +1337,16 @@ class CDPMethods():
|
|
1319
1337
|
return value
|
1320
1338
|
|
1321
1339
|
def get_attribute(self, selector, attribute):
|
1340
|
+
"""Find an element and return the value of an attribute.
|
1341
|
+
If the element doesn't exist: Raises an exception.
|
1342
|
+
If the attribute doesn't exist: Returns None."""
|
1322
1343
|
return self.find_element(selector).get_attribute(attribute)
|
1323
1344
|
|
1324
1345
|
def get_element_html(self, selector):
|
1346
|
+
"""Find an element and return the outerHTML."""
|
1325
1347
|
selector = self.__convert_to_css_if_xpath(selector)
|
1348
|
+
self.find_element(selector)
|
1349
|
+
self.__add_light_pause()
|
1326
1350
|
return self.loop.run_until_complete(
|
1327
1351
|
self.page.evaluate(
|
1328
1352
|
"""document.querySelector('%s').outerHTML"""
|
@@ -1415,6 +1439,10 @@ class CDPMethods():
|
|
1415
1439
|
shared_utils.is_linux()
|
1416
1440
|
and (not sb_config.headed or sb_config.xvfb)
|
1417
1441
|
and not driver.config.headless
|
1442
|
+
and (
|
1443
|
+
not hasattr(sb_config, "_virtual_display")
|
1444
|
+
or not sb_config._virtual_display
|
1445
|
+
)
|
1418
1446
|
):
|
1419
1447
|
from sbvirtualdisplay import Display
|
1420
1448
|
xvfb_width = 1366
|
@@ -1442,6 +1470,11 @@ class CDPMethods():
|
|
1442
1470
|
backend="xvfb",
|
1443
1471
|
use_xauth=True,
|
1444
1472
|
)
|
1473
|
+
if "--debug-display" in sys.argv:
|
1474
|
+
print(
|
1475
|
+
"Starting VDisplay from sb_cdp: (%s, %s)"
|
1476
|
+
% (xvfb_width, xvfb_height)
|
1477
|
+
)
|
1445
1478
|
xvfb_display.start()
|
1446
1479
|
|
1447
1480
|
def __get_configured_pyautogui(self, pyautogui_copy):
|
@@ -1910,7 +1910,10 @@ class BaseCase(unittest.TestCase):
|
|
1910
1910
|
timeout = self.__get_new_timeout(timeout)
|
1911
1911
|
selector, by = self.__recalculate_selector(selector, by)
|
1912
1912
|
if self.__is_cdp_swap_needed():
|
1913
|
-
|
1913
|
+
if hard_fail:
|
1914
|
+
return self.cdp.get_element_attribute(selector, attribute)
|
1915
|
+
else:
|
1916
|
+
return self.cdp.get_attribute(selector, attribute)
|
1914
1917
|
self.wait_for_ready_state_complete()
|
1915
1918
|
time.sleep(0.01)
|
1916
1919
|
if self.__is_shadow_selector(selector):
|
@@ -4883,6 +4886,7 @@ class BaseCase(unittest.TestCase):
|
|
4883
4886
|
self.execute_script(script)
|
4884
4887
|
|
4885
4888
|
def activate_cdp_mode(self, url=None, **kwargs):
|
4889
|
+
"""Activate CDP Mode with the URL and kwargs."""
|
4886
4890
|
if hasattr(self.driver, "_is_using_uc") and self.driver._is_using_uc:
|
4887
4891
|
if self.__is_cdp_swap_needed():
|
4888
4892
|
return # CDP Mode is already active
|
@@ -4898,6 +4902,8 @@ class BaseCase(unittest.TestCase):
|
|
4898
4902
|
self.cdp = self.driver.cdp
|
4899
4903
|
|
4900
4904
|
def activate_recorder(self):
|
4905
|
+
"""Activate Recorder Mode on the current tab/window.
|
4906
|
+
For persistent Recorder Mode, use the extension instead."""
|
4901
4907
|
from seleniumbase.js_code.recorder_js import recorder_js
|
4902
4908
|
|
4903
4909
|
if not self.is_chromium():
|
@@ -14158,7 +14164,13 @@ class BaseCase(unittest.TestCase):
|
|
14158
14164
|
backend="xvfb",
|
14159
14165
|
use_xauth=True,
|
14160
14166
|
)
|
14167
|
+
if "--debug-display" in sys.argv:
|
14168
|
+
print(
|
14169
|
+
"Starting VDisplay from base_case: (%s, %s)"
|
14170
|
+
% (self._xvfb_width, self._xvfb_height)
|
14171
|
+
)
|
14161
14172
|
self._xvfb_display.start()
|
14173
|
+
sb_config._virtual_display = self._xvfb_display
|
14162
14174
|
if "DISPLAY" not in os.environ.keys():
|
14163
14175
|
print(
|
14164
14176
|
"\nX11 display failed! Will use regular xvfb!"
|
@@ -16,7 +16,7 @@ import urllib.request
|
|
16
16
|
import warnings
|
17
17
|
from collections import defaultdict
|
18
18
|
from seleniumbase import config as sb_config
|
19
|
-
from typing import List, Set, Tuple, Union
|
19
|
+
from typing import List, Optional, Set, Tuple, Union
|
20
20
|
import mycdp as cdp
|
21
21
|
from . import cdp_util as util
|
22
22
|
from . import tab
|
@@ -504,10 +504,22 @@ class Browser:
|
|
504
504
|
# self.connection.handlers[cdp.inspector.Detached] = [self.stop]
|
505
505
|
# return self
|
506
506
|
|
507
|
+
async def grant_permissions(
|
508
|
+
self,
|
509
|
+
permissions: List[str] | str,
|
510
|
+
origin: Optional[str] = None,
|
511
|
+
):
|
512
|
+
"""Grant specific permissions to the current window.
|
513
|
+
Applies to all origins if no origin is specified."""
|
514
|
+
if isinstance(permissions, str):
|
515
|
+
permissions = [permissions]
|
516
|
+
await self.connection.send(
|
517
|
+
cdp.browser.grant_permissions(permissions, origin)
|
518
|
+
)
|
519
|
+
|
507
520
|
async def grant_all_permissions(self):
|
508
521
|
"""
|
509
522
|
Grant permissions for:
|
510
|
-
accessibilityEvents
|
511
523
|
audioCapture
|
512
524
|
backgroundSync
|
513
525
|
backgroundFetch
|
@@ -524,21 +536,45 @@ class Browser:
|
|
524
536
|
notifications
|
525
537
|
paymentHandler
|
526
538
|
periodicBackgroundSync
|
527
|
-
protectedMediaIdentifier
|
528
539
|
sensors
|
529
540
|
storageAccess
|
530
541
|
topLevelStorageAccess
|
531
542
|
videoCapture
|
532
|
-
videoCapturePanTiltZoom
|
533
543
|
wakeLockScreen
|
534
544
|
wakeLockSystem
|
535
545
|
windowManagement
|
536
546
|
"""
|
537
|
-
permissions =
|
538
|
-
|
539
|
-
|
547
|
+
permissions = [
|
548
|
+
"audioCapture",
|
549
|
+
"backgroundSync",
|
550
|
+
"backgroundFetch",
|
551
|
+
"clipboardReadWrite",
|
552
|
+
"clipboardSanitizedWrite",
|
553
|
+
"displayCapture",
|
554
|
+
"durableStorage",
|
555
|
+
"geolocation",
|
556
|
+
"idleDetection",
|
557
|
+
"localFonts",
|
558
|
+
"midi",
|
559
|
+
"midiSysex",
|
560
|
+
"nfc",
|
561
|
+
"notifications",
|
562
|
+
"paymentHandler",
|
563
|
+
"periodicBackgroundSync",
|
564
|
+
"sensors",
|
565
|
+
"storageAccess",
|
566
|
+
"topLevelStorageAccess",
|
567
|
+
"videoCapture",
|
568
|
+
"wakeLockScreen",
|
569
|
+
"wakeLockSystem",
|
570
|
+
"windowManagement",
|
571
|
+
]
|
540
572
|
await self.connection.send(cdp.browser.grant_permissions(permissions))
|
541
573
|
|
574
|
+
async def reset_permissions(self):
|
575
|
+
"""Reset permissions for all origins on the current window."""
|
576
|
+
await self.connection.send(cdp.browser.reset_permissions())
|
577
|
+
|
542
578
|
async def tile_windows(self, windows=None, max_columns: int = 0):
|
543
579
|
import math
|
544
580
|
try:
|
@@ -51,7 +51,14 @@ def __activate_virtual_display_as_needed(
|
|
51
51
|
headless, headed, xvfb, xvfb_metrics
|
52
52
|
):
|
53
53
|
"""This is only needed on Linux."""
|
54
|
-
if
|
54
|
+
if (
|
55
|
+
IS_LINUX
|
56
|
+
and (not headed or xvfb)
|
57
|
+
and (
|
58
|
+
not hasattr(sb_config, "_virtual_display")
|
59
|
+
or not sb_config._virtual_display
|
60
|
+
)
|
61
|
+
):
|
55
62
|
from sbvirtualdisplay import Display
|
56
63
|
pip_find_lock = fasteners.InterProcessLock(
|
57
64
|
constants.PipInstall.FINDLOCK
|
@@ -87,6 +94,11 @@ def __activate_virtual_display_as_needed(
|
|
87
94
|
backend="xvfb",
|
88
95
|
use_xauth=True,
|
89
96
|
)
|
97
|
+
if "--debug-display" in sys.argv:
|
98
|
+
print(
|
99
|
+
"Starting VDisplay from cdp_util: (%s, %s)"
|
100
|
+
% (_xvfb_width, _xvfb_height)
|
101
|
+
)
|
90
102
|
_xvfb_display.start()
|
91
103
|
if "DISPLAY" not in os.environ.keys():
|
92
104
|
print(
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.39.
|
3
|
+
Version: 4.39.6
|
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
|
@@ -40,6 +40,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
40
40
|
Classifier: Programming Language :: Python :: 3.11
|
41
41
|
Classifier: Programming Language :: Python :: 3.12
|
42
42
|
Classifier: Programming Language :: Python :: 3.13
|
43
|
+
Classifier: Programming Language :: Python :: 3.14
|
43
44
|
Classifier: Topic :: Internet
|
44
45
|
Classifier: Topic :: Internet :: WWW/HTTP :: Browsers
|
45
46
|
Classifier: Topic :: Scientific/Engineering
|
@@ -66,7 +67,7 @@ Requires-Dist: setuptools~=70.2; python_version < "3.10"
|
|
66
67
|
Requires-Dist: setuptools>=80.9.0; python_version >= "3.10"
|
67
68
|
Requires-Dist: wheel>=0.45.1
|
68
69
|
Requires-Dist: attrs>=25.3.0
|
69
|
-
Requires-Dist: certifi>=2025.
|
70
|
+
Requires-Dist: certifi>=2025.6.15
|
70
71
|
Requires-Dist: exceptiongroup>=1.3.0
|
71
72
|
Requires-Dist: websockets~=13.1; python_version < "3.9"
|
72
73
|
Requires-Dist: websockets>=15.0.1; python_version >= "3.9"
|
@@ -87,7 +88,7 @@ Requires-Dist: parse>=1.20.2
|
|
87
88
|
Requires-Dist: parse-type>=0.6.4
|
88
89
|
Requires-Dist: colorama>=0.4.6
|
89
90
|
Requires-Dist: pyyaml>=6.0.2
|
90
|
-
Requires-Dist: pygments>=2.19.
|
91
|
+
Requires-Dist: pygments>=2.19.2
|
91
92
|
Requires-Dist: pyreadline3>=3.5.3; platform_system == "Windows"
|
92
93
|
Requires-Dist: tabcompleter>=1.4.0
|
93
94
|
Requires-Dist: pdbp>=1.7.0
|
@@ -95,7 +96,7 @@ Requires-Dist: idna==3.10
|
|
95
96
|
Requires-Dist: chardet==5.2.0
|
96
97
|
Requires-Dist: charset-normalizer<4,>=3.4.2
|
97
98
|
Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
|
98
|
-
Requires-Dist: urllib3<2.
|
99
|
+
Requires-Dist: urllib3<2.6.0,>=1.26.20; python_version >= "3.10"
|
99
100
|
Requires-Dist: requests==2.32.4
|
100
101
|
Requires-Dist: sniffio==1.3.1
|
101
102
|
Requires-Dist: h11==0.16.0
|
@@ -116,14 +117,14 @@ Requires-Dist: iniconfig==2.1.0
|
|
116
117
|
Requires-Dist: pluggy==1.5.0; python_version < "3.9"
|
117
118
|
Requires-Dist: pluggy==1.6.0; python_version >= "3.9"
|
118
119
|
Requires-Dist: pytest==8.3.5; python_version < "3.9"
|
119
|
-
Requires-Dist: pytest==8.4.
|
120
|
+
Requires-Dist: pytest==8.4.1; python_version >= "3.9"
|
120
121
|
Requires-Dist: pytest-html==4.0.2
|
121
122
|
Requires-Dist: pytest-metadata==3.1.1
|
122
123
|
Requires-Dist: pytest-ordering==0.6
|
123
124
|
Requires-Dist: pytest-rerunfailures==14.0; python_version < "3.9"
|
124
125
|
Requires-Dist: pytest-rerunfailures==15.1; python_version >= "3.9"
|
125
126
|
Requires-Dist: pytest-xdist==3.6.1; python_version < "3.9"
|
126
|
-
Requires-Dist: pytest-xdist==3.
|
127
|
+
Requires-Dist: pytest-xdist==3.8.0; python_version >= "3.9"
|
127
128
|
Requires-Dist: parameterized==0.9.0
|
128
129
|
Requires-Dist: behave==1.2.6
|
129
130
|
Requires-Dist: soupsieve==2.7
|
@@ -139,17 +140,17 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
|
|
139
140
|
Requires-Dist: allure-behave>=2.13.5; extra == "allure"
|
140
141
|
Provides-Extra: coverage
|
141
142
|
Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
|
142
|
-
Requires-Dist: coverage>=7.
|
143
|
+
Requires-Dist: coverage>=7.9.1; python_version >= "3.9" and extra == "coverage"
|
143
144
|
Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
|
144
|
-
Requires-Dist: pytest-cov>=6.
|
145
|
+
Requires-Dist: pytest-cov>=6.2.1; python_version >= "3.9" and extra == "coverage"
|
145
146
|
Provides-Extra: flake8
|
146
147
|
Requires-Dist: flake8==5.0.4; python_version < "3.9" and extra == "flake8"
|
147
|
-
Requires-Dist: flake8==7.
|
148
|
+
Requires-Dist: flake8==7.3.0; python_version >= "3.9" and extra == "flake8"
|
148
149
|
Requires-Dist: mccabe==0.7.0; extra == "flake8"
|
149
150
|
Requires-Dist: pyflakes==2.5.0; python_version < "3.9" and extra == "flake8"
|
150
|
-
Requires-Dist: pyflakes==3.
|
151
|
+
Requires-Dist: pyflakes==3.4.0; python_version >= "3.9" and extra == "flake8"
|
151
152
|
Requires-Dist: pycodestyle==2.9.1; python_version < "3.9" and extra == "flake8"
|
152
|
-
Requires-Dist: pycodestyle==2.
|
153
|
+
Requires-Dist: pycodestyle==2.14.0; python_version >= "3.9" and extra == "flake8"
|
153
154
|
Provides-Extra: ipdb
|
154
155
|
Requires-Dist: ipdb==0.13.13; extra == "ipdb"
|
155
156
|
Requires-Dist: ipython==7.34.0; extra == "ipdb"
|
@@ -160,12 +161,12 @@ Provides-Extra: pdfminer
|
|
160
161
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
161
162
|
Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
|
162
163
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
163
|
-
Requires-Dist: cryptography==45.0.
|
164
|
+
Requires-Dist: cryptography==45.0.4; python_version >= "3.9" and extra == "pdfminer"
|
164
165
|
Requires-Dist: cffi==1.17.1; extra == "pdfminer"
|
165
166
|
Requires-Dist: pycparser==2.22; extra == "pdfminer"
|
166
167
|
Provides-Extra: pillow
|
167
168
|
Requires-Dist: Pillow>=10.4.0; python_version < "3.9" and extra == "pillow"
|
168
|
-
Requires-Dist: Pillow>=11.
|
169
|
+
Requires-Dist: Pillow>=11.3.0; python_version >= "3.9" and extra == "pillow"
|
169
170
|
Provides-Extra: pip-system-certs
|
170
171
|
Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra == "pip-system-certs"
|
171
172
|
Provides-Extra: proxy
|
@@ -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=8zjRpQKgeZH5MsjlkKK9zW-9i5Cxv8FcdzjOkNJCAlo,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=bbbfa8ID6nMnmrVJ7G-014uOj5PE4B8IROZB2WXSQ8I,59172
|
@@ -36,7 +36,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0C
|
|
36
36
|
seleniumbase/console_scripts/sb_recorder.py,sha256=DH-n2fN7N9qyHMl7wjtn8MiliBgfw-1kwgmfg1GUuhk,10772
|
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=nzmsNY6rxD77MjRsSXvmxIJCPjqmWG1z2ArC35ev7zg,243609
|
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
|
@@ -50,7 +50,7 @@ seleniumbase/core/proxy_helper.py,sha256=pZ1NboNfziHU3vWZLOZLX-qkfM3oKSnpc3omQf9
|
|
50
50
|
seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUOzQxNhNQ,25055
|
51
51
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
52
52
|
seleniumbase/core/s3_manager.py,sha256=z_4qx2jI_gtK5r3niGXgEOBpfMUicUCOciowai50MP4,3529
|
53
|
-
seleniumbase/core/sb_cdp.py,sha256=
|
53
|
+
seleniumbase/core/sb_cdp.py,sha256=ad3iRpHAHcsH4QtJVFJemxEak2RvSJkNtS_EO3OPX8g,88252
|
54
54
|
seleniumbase/core/sb_driver.py,sha256=yUdS9_9OXTVaWzp1qY7msvnsvCK8X3FIcxMixb0BuBE,13827
|
55
55
|
seleniumbase/core/session_helper.py,sha256=s9zD3PVZEWVzG2h81cCUskbNWLfdjC_LwwQjKptHCak,558
|
56
56
|
seleniumbase/core/settings_parser.py,sha256=gqVohHVlE_5L5Cqe2L24uYrRzvoK-saX8E_Df7_-_3I,7609
|
@@ -65,7 +65,7 @@ seleniumbase/extensions/disable_csp.zip,sha256=5RvomXnm2PdivUVcxTV6jfvD8WhTEsQYH
|
|
65
65
|
seleniumbase/extensions/recorder.zip,sha256=JEE_FVEvlS63cFQbVLEroIyPSS91nWCDL0MhjVrmIpk,11813
|
66
66
|
seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
|
67
67
|
seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
68
|
-
seleniumbase/fixtures/base_case.py,sha256=
|
68
|
+
seleniumbase/fixtures/base_case.py,sha256=039aEMIJJ81JisIQyVgfa1WzHMRrW4BMzgqNz9DTKgM,727718
|
69
69
|
seleniumbase/fixtures/constants.py,sha256=WMrItuNyKq3XVJ64NluLIRc4gJCxDw8K8qXED0b9S2w,13752
|
70
70
|
seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
|
71
71
|
seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
|
@@ -115,8 +115,8 @@ 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=LF0TukNNuPN1zh75oiPBHKU3uLc4BmVyyw0EFn7hnWg,35640
|
119
|
+
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=ku3Nq8yjC6kbvVV2PB149E-TxQIIvjHDFQI2wyi0HVs,25221
|
120
120
|
seleniumbase/undetected/cdp_driver/config.py,sha256=4-nUkEf7JSuOdFMNd6XmJnFucZrA59-kH1FUMxDcgFU,12561
|
121
121
|
seleniumbase/undetected/cdp_driver/connection.py,sha256=WgZ4QamXSdTzP4Xfgkn8mxv-JFivMG6hqbyHy2_LQlg,25717
|
122
122
|
seleniumbase/undetected/cdp_driver/element.py,sha256=FIC6v7OmumLCT-_vIc3H4oju_oBbaLpWJUJIKm2c_q4,40467
|
@@ -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.39.
|
139
|
-
seleniumbase-4.39.
|
140
|
-
seleniumbase-4.39.
|
141
|
-
seleniumbase-4.39.
|
142
|
-
seleniumbase-4.39.
|
143
|
-
seleniumbase-4.39.
|
138
|
+
seleniumbase-4.39.6.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
|
139
|
+
seleniumbase-4.39.6.dist-info/METADATA,sha256=R1P9fLbDM-LhAnuEI1ohiM0JJoZ3WQEXyu9i7JmdubE,87335
|
140
|
+
seleniumbase-4.39.6.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
141
|
+
seleniumbase-4.39.6.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
142
|
+
seleniumbase-4.39.6.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
143
|
+
seleniumbase-4.39.6.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|