seleniumbase 4.39.0__py3-none-any.whl → 4.39.2__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/console_scripts/sb_mkrec.py +3 -2
- seleniumbase/core/browser_launcher.py +46 -9
- seleniumbase/core/sb_driver.py +2 -1
- seleniumbase/extensions/recorder.zip +0 -0
- seleniumbase/plugins/driver_manager.py +2 -1
- seleniumbase/plugins/sb_manager.py +3 -2
- seleniumbase/undetected/cdp_driver/browser.py +35 -0
- seleniumbase/undetected/cdp_driver/cdp_util.py +16 -8
- seleniumbase/undetected/cdp_driver/config.py +2 -1
- seleniumbase/undetected/cdp_driver/connection.py +31 -0
- {seleniumbase-4.39.0.dist-info → seleniumbase-4.39.2.dist-info}/METADATA +4 -3
- {seleniumbase-4.39.0.dist-info → seleniumbase-4.39.2.dist-info}/RECORD +17 -17
- {seleniumbase-4.39.0.dist-info → seleniumbase-4.39.2.dist-info}/WHEEL +1 -1
- {seleniumbase-4.39.0.dist-info → seleniumbase-4.39.2.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.39.0.dist-info → seleniumbase-4.39.2.dist-info}/licenses/LICENSE +0 -0
- {seleniumbase-4.39.0.dist-info → seleniumbase-4.39.2.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.2"
|
@@ -192,8 +192,9 @@ def main():
|
|
192
192
|
elif "'" not in start_page:
|
193
193
|
used_sp = "'%s'" % start_page
|
194
194
|
data.append(
|
195
|
-
" self.
|
196
|
-
" %s
|
195
|
+
" self.activate_cdp_mode(\n"
|
196
|
+
" %s,\n"
|
197
|
+
" recorder=True,\n"
|
197
198
|
" )" % used_sp
|
198
199
|
)
|
199
200
|
else:
|
@@ -108,7 +108,9 @@ def make_driver_executable_if_not(driver_path):
|
|
108
108
|
shared_utils.make_executable(driver_path)
|
109
109
|
|
110
110
|
|
111
|
-
def extend_driver(
|
111
|
+
def extend_driver(
|
112
|
+
driver, proxy_auth=False, use_uc=True, recorder_ext=False
|
113
|
+
):
|
112
114
|
# Extend the driver with new methods
|
113
115
|
driver.default_find_element = driver.find_element
|
114
116
|
driver.default_find_elements = driver.find_elements
|
@@ -234,6 +236,14 @@ def extend_driver(driver, proxy_auth=False, use_uc=True):
|
|
234
236
|
driver.switch_to_tab = DM.switch_to_tab
|
235
237
|
driver.switch_to_frame = DM.switch_to_frame
|
236
238
|
driver.reset_window_size = DM.reset_window_size
|
239
|
+
if recorder_ext:
|
240
|
+
from seleniumbase.js_code.recorder_js import recorder_js
|
241
|
+
recorder_code = (
|
242
|
+
"""window.onload = function() { %s };""" % recorder_js
|
243
|
+
)
|
244
|
+
driver.execute_cdp_cmd(
|
245
|
+
"Page.addScriptToEvaluateOnNewDocument", {"source": recorder_code}
|
246
|
+
)
|
237
247
|
if hasattr(driver, "proxy"):
|
238
248
|
driver.set_wire_proxy = DM.set_wire_proxy
|
239
249
|
if proxy_auth:
|
@@ -2159,6 +2169,9 @@ def _set_chrome_options(
|
|
2159
2169
|
prefs["profile.default_content_setting_values.automatic_downloads"] = 1
|
2160
2170
|
if locale_code:
|
2161
2171
|
prefs["intl.accept_languages"] = locale_code
|
2172
|
+
sb_config._cdp_locale = locale_code
|
2173
|
+
else:
|
2174
|
+
sb_config._cdp_locale = None
|
2162
2175
|
if block_images:
|
2163
2176
|
prefs["profile.managed_default_content_settings.images"] = 2
|
2164
2177
|
if disable_cookies:
|
@@ -2542,6 +2555,7 @@ def _set_chrome_options(
|
|
2542
2555
|
included_disabled_features.append("PrivacySandboxSettings4")
|
2543
2556
|
included_disabled_features.append("SidePanelPinning")
|
2544
2557
|
included_disabled_features.append("UserAgentClientHint")
|
2558
|
+
included_disabled_features.append("DisableLoadExtensionCommandLineSwitch")
|
2545
2559
|
for item in extra_disabled_features:
|
2546
2560
|
if item not in included_disabled_features:
|
2547
2561
|
included_disabled_features.append(item)
|
@@ -2819,6 +2833,8 @@ def get_driver(
|
|
2819
2833
|
if headless2 and browser_name == constants.Browser.FIREFOX:
|
2820
2834
|
headless2 = False # Only for Chromium
|
2821
2835
|
headless = True
|
2836
|
+
if binary_location and isinstance(binary_location, str):
|
2837
|
+
binary_location = binary_location.strip()
|
2822
2838
|
if (
|
2823
2839
|
is_using_uc(undetectable, browser_name)
|
2824
2840
|
and binary_location
|
@@ -3014,6 +3030,8 @@ def get_driver(
|
|
3014
3030
|
proxy_pass = None
|
3015
3031
|
proxy_scheme = "http"
|
3016
3032
|
if proxy_string:
|
3033
|
+
# (The code below was for the Chrome 137 extension fix)
|
3034
|
+
# sb_config._cdp_proxy = proxy_string
|
3017
3035
|
username_and_password = None
|
3018
3036
|
if "@" in proxy_string:
|
3019
3037
|
# Format => username:password@hostname:port
|
@@ -4450,6 +4468,9 @@ def get_local_driver(
|
|
4450
4468
|
included_disabled_features.append("PrivacySandboxSettings4")
|
4451
4469
|
included_disabled_features.append("SidePanelPinning")
|
4452
4470
|
included_disabled_features.append("UserAgentClientHint")
|
4471
|
+
included_disabled_features.append(
|
4472
|
+
"DisableLoadExtensionCommandLineSwitch"
|
4473
|
+
)
|
4453
4474
|
for item in extra_disabled_features:
|
4454
4475
|
if item not in included_disabled_features:
|
4455
4476
|
included_disabled_features.append(item)
|
@@ -5328,7 +5349,9 @@ def get_local_driver(
|
|
5328
5349
|
driver = webdriver.Chrome(
|
5329
5350
|
service=service, options=chrome_options
|
5330
5351
|
)
|
5331
|
-
return extend_driver(
|
5352
|
+
return extend_driver(
|
5353
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5354
|
+
)
|
5332
5355
|
if not auto_upgrade_chromedriver:
|
5333
5356
|
raise # Not an obvious fix.
|
5334
5357
|
else:
|
@@ -5580,11 +5603,15 @@ def get_local_driver(
|
|
5580
5603
|
'Emulation.setDeviceMetricsOverride',
|
5581
5604
|
set_device_metrics_override
|
5582
5605
|
)
|
5583
|
-
return extend_driver(
|
5606
|
+
return extend_driver(
|
5607
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5608
|
+
)
|
5584
5609
|
else: # Running headless on Linux (and not using --uc)
|
5585
5610
|
try:
|
5586
5611
|
driver = webdriver.Chrome(options=chrome_options)
|
5587
|
-
return extend_driver(
|
5612
|
+
return extend_driver(
|
5613
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5614
|
+
)
|
5588
5615
|
except Exception as e:
|
5589
5616
|
if not hasattr(e, "msg"):
|
5590
5617
|
raise
|
@@ -5606,7 +5633,9 @@ def get_local_driver(
|
|
5606
5633
|
driver = webdriver.Chrome(
|
5607
5634
|
service=service, options=chrome_options
|
5608
5635
|
)
|
5609
|
-
return extend_driver(
|
5636
|
+
return extend_driver(
|
5637
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5638
|
+
)
|
5610
5639
|
mcv = None # Major Chrome Version
|
5611
5640
|
if "Current browser version is " in e.msg:
|
5612
5641
|
line = e.msg.split("Current browser version is ")[1]
|
@@ -5649,7 +5678,9 @@ def get_local_driver(
|
|
5649
5678
|
service=service,
|
5650
5679
|
options=chrome_options,
|
5651
5680
|
)
|
5652
|
-
return extend_driver(
|
5681
|
+
return extend_driver(
|
5682
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5683
|
+
)
|
5653
5684
|
# Use the virtual display on Linux during headless errors
|
5654
5685
|
logging.debug(
|
5655
5686
|
"\nWarning: Chrome failed to launch in"
|
@@ -5667,7 +5698,9 @@ def get_local_driver(
|
|
5667
5698
|
driver = webdriver.Chrome(
|
5668
5699
|
service=service, options=chrome_options
|
5669
5700
|
)
|
5670
|
-
return extend_driver(
|
5701
|
+
return extend_driver(
|
5702
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5703
|
+
)
|
5671
5704
|
except Exception as original_exception:
|
5672
5705
|
if use_uc:
|
5673
5706
|
raise
|
@@ -5677,7 +5710,9 @@ def get_local_driver(
|
|
5677
5710
|
driver = webdriver.Chrome(
|
5678
5711
|
service=service, options=chrome_options
|
5679
5712
|
)
|
5680
|
-
return extend_driver(
|
5713
|
+
return extend_driver(
|
5714
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5715
|
+
)
|
5681
5716
|
if user_data_dir:
|
5682
5717
|
print("\nUnable to set user_data_dir while starting Chrome!\n")
|
5683
5718
|
raise
|
@@ -5704,7 +5739,9 @@ def get_local_driver(
|
|
5704
5739
|
)
|
5705
5740
|
try:
|
5706
5741
|
driver = webdriver.Chrome(service=service)
|
5707
|
-
return extend_driver(
|
5742
|
+
return extend_driver(
|
5743
|
+
driver, proxy_auth, use_uc, recorder_ext
|
5744
|
+
)
|
5708
5745
|
except Exception:
|
5709
5746
|
raise original_exception
|
5710
5747
|
else:
|
seleniumbase/core/sb_driver.py
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
"""Add new methods to extend the driver"""
|
2
2
|
from contextlib import suppress
|
3
|
+
from selenium.webdriver.remote.webdriver import WebDriver
|
3
4
|
from selenium.webdriver.remote.webelement import WebElement
|
4
5
|
from seleniumbase.config import settings
|
5
6
|
from seleniumbase.fixtures import js_utils
|
@@ -8,7 +9,7 @@ from seleniumbase.fixtures import page_utils
|
|
8
9
|
from seleniumbase.fixtures import shared_utils
|
9
10
|
|
10
11
|
|
11
|
-
class DriverMethods():
|
12
|
+
class DriverMethods(WebDriver):
|
12
13
|
def __init__(self, driver):
|
13
14
|
self.driver = driver
|
14
15
|
|
Binary file
|
@@ -38,6 +38,7 @@ driver.get("https://google.com/ncr")
|
|
38
38
|
"""
|
39
39
|
import os
|
40
40
|
import sys
|
41
|
+
from seleniumbase.core import sb_driver
|
41
42
|
|
42
43
|
|
43
44
|
class DriverContext():
|
@@ -139,7 +140,7 @@ def Driver(
|
|
139
140
|
pls=None, # Shortcut / Duplicate of "page_load_strategy".
|
140
141
|
cft=None, # Use "Chrome for Testing"
|
141
142
|
chs=None, # Use "Chrome-Headless-Shell"
|
142
|
-
):
|
143
|
+
) -> sb_driver.DriverMethods:
|
143
144
|
"""
|
144
145
|
* SeleniumBase Driver as a Python Context Manager or a returnable object. *
|
145
146
|
|
@@ -24,6 +24,8 @@ with SB(uc=True) as sb: # Many args! Eg. SB(browser="edge")
|
|
24
24
|
#########################################
|
25
25
|
"""
|
26
26
|
from contextlib import contextmanager, suppress
|
27
|
+
from typing import Any, Generator
|
28
|
+
from seleniumbase import BaseCase
|
27
29
|
|
28
30
|
|
29
31
|
@contextmanager # Usage: -> ``with SB() as sb:``
|
@@ -133,7 +135,7 @@ def SB(
|
|
133
135
|
highlights=None, # Number of highlight animations for Demo Mode actions.
|
134
136
|
interval=None, # SECONDS (Autoplay interval for SB Slides & Tour steps.)
|
135
137
|
time_limit=None, # SECONDS (Safely fail tests that exceed the time limit.)
|
136
|
-
):
|
138
|
+
) -> Generator[BaseCase, Any, None]:
|
137
139
|
"""
|
138
140
|
* SeleniumBase as a Python Context Manager *
|
139
141
|
|
@@ -263,7 +265,6 @@ def SB(
|
|
263
265
|
import sys
|
264
266
|
import time
|
265
267
|
import traceback
|
266
|
-
from seleniumbase import BaseCase
|
267
268
|
from seleniumbase import config as sb_config
|
268
269
|
from seleniumbase.config import settings
|
269
270
|
from seleniumbase.fixtures import constants
|
@@ -292,6 +292,7 @@ class Browser:
|
|
292
292
|
_cdp_locale = None
|
293
293
|
_cdp_platform = None
|
294
294
|
_cdp_geolocation = None
|
295
|
+
_cdp_recorder = None
|
295
296
|
if (
|
296
297
|
hasattr(sb_config, "_cdp_timezone") and sb_config._cdp_timezone
|
297
298
|
):
|
@@ -322,6 +323,8 @@ class Browser:
|
|
322
323
|
_cdp_locale = kwargs["locale"]
|
323
324
|
elif "lang" in kwargs:
|
324
325
|
_cdp_locale = kwargs["lang"]
|
326
|
+
elif "locale_code" in kwargs:
|
327
|
+
_cdp_locale = kwargs["locale_code"]
|
325
328
|
if "platform" in kwargs:
|
326
329
|
_cdp_platform = kwargs["platform"]
|
327
330
|
elif "plat" in kwargs:
|
@@ -330,9 +333,13 @@ class Browser:
|
|
330
333
|
_cdp_geolocation = kwargs["geolocation"]
|
331
334
|
elif "geoloc" in kwargs:
|
332
335
|
_cdp_geolocation = kwargs["geoloc"]
|
336
|
+
if "recorder" in kwargs:
|
337
|
+
_cdp_recorder = kwargs["recorder"]
|
333
338
|
if _cdp_timezone:
|
334
339
|
await connection.send(cdp.page.navigate("about:blank"))
|
335
340
|
await connection.set_timezone(_cdp_timezone)
|
341
|
+
if _cdp_locale:
|
342
|
+
await connection.set_locale(_cdp_locale)
|
336
343
|
if _cdp_user_agent or _cdp_locale or _cdp_platform:
|
337
344
|
await connection.send(cdp.page.navigate("about:blank"))
|
338
345
|
await connection.set_user_agent(
|
@@ -344,9 +351,37 @@ class Browser:
|
|
344
351
|
await connection.send(cdp.page.navigate("about:blank"))
|
345
352
|
await connection.set_geolocation(_cdp_geolocation)
|
346
353
|
# Use the tab to navigate to new url
|
354
|
+
if (
|
355
|
+
hasattr(sb_config, "_cdp_proxy")
|
356
|
+
and "@" in sb_config._cdp_proxy
|
357
|
+
and sb_config._cdp_proxy
|
358
|
+
and "auth" not in kwargs
|
359
|
+
):
|
360
|
+
username_and_password = sb_config._cdp_proxy.split("@")[0]
|
361
|
+
proxy_user = username_and_password.split(":")[0]
|
362
|
+
proxy_pass = username_and_password.split(":")[1]
|
363
|
+
await connection.set_auth(
|
364
|
+
proxy_user, proxy_pass, self.tabs[0]
|
365
|
+
)
|
366
|
+
time.sleep(0.25)
|
367
|
+
elif "auth" in kwargs and kwargs["auth"] and ":" in kwargs["auth"]:
|
368
|
+
username_and_password = kwargs["auth"]
|
369
|
+
proxy_user = username_and_password.split(":")[0]
|
370
|
+
proxy_pass = username_and_password.split(":")[1]
|
371
|
+
await connection.set_auth(
|
372
|
+
proxy_user, proxy_pass, self.tabs[0]
|
373
|
+
)
|
374
|
+
time.sleep(0.25)
|
347
375
|
frame_id, loader_id, *_ = await connection.send(
|
348
376
|
cdp.page.navigate(url)
|
349
377
|
)
|
378
|
+
if _cdp_recorder:
|
379
|
+
pass # (The code below was for the Chrome 137 extension fix)
|
380
|
+
'''from seleniumbase.js_code.recorder_js import recorder_js
|
381
|
+
recorder_code = (
|
382
|
+
"""window.onload = function() { %s };""" % recorder_js
|
383
|
+
)
|
384
|
+
await connection.send(cdp.runtime.evaluate(recorder_code))'''
|
350
385
|
# Update the frame_id on the tab
|
351
386
|
connection.frame_id = frame_id
|
352
387
|
connection.browser = self
|
@@ -360,16 +360,16 @@ async def start(
|
|
360
360
|
except Exception:
|
361
361
|
time.sleep(0.15)
|
362
362
|
driver = await Browser.create(config)
|
363
|
-
if proxy
|
364
|
-
|
363
|
+
if proxy:
|
364
|
+
sb_config._cdp_proxy = proxy
|
365
|
+
if "@" in str(proxy):
|
366
|
+
time.sleep(0.15)
|
365
367
|
if lang:
|
366
368
|
sb_config._cdp_locale = lang
|
367
369
|
elif "locale" in kwargs:
|
368
370
|
sb_config._cdp_locale = kwargs["locale"]
|
369
371
|
elif "locale_code" in kwargs:
|
370
372
|
sb_config._cdp_locale = kwargs["locale_code"]
|
371
|
-
else:
|
372
|
-
sb_config._cdp_locale = None
|
373
373
|
if tzone:
|
374
374
|
sb_config._cdp_timezone = tzone
|
375
375
|
elif "timezone" in kwargs:
|
@@ -402,10 +402,14 @@ async def start_async(*args, **kwargs) -> Browser:
|
|
402
402
|
binary_location = None
|
403
403
|
if "browser_executable_path" in kwargs:
|
404
404
|
binary_location = kwargs["browser_executable_path"]
|
405
|
+
if binary_location and isinstance(binary_location, str):
|
406
|
+
binary_location = binary_location.strip()
|
405
407
|
else:
|
406
408
|
binary_location = detect_b_ver.get_binary_location("google-chrome")
|
407
|
-
if binary_location and
|
408
|
-
binary_location =
|
409
|
+
if binary_location and isinstance(binary_location, str):
|
410
|
+
binary_location = binary_location.strip()
|
411
|
+
if not os.path.exists(binary_location):
|
412
|
+
binary_location = None
|
409
413
|
if (
|
410
414
|
shared_utils.is_chrome_130_or_newer(binary_location)
|
411
415
|
and "user_data_dir" in kwargs
|
@@ -438,10 +442,14 @@ def start_sync(*args, **kwargs) -> Browser:
|
|
438
442
|
binary_location = None
|
439
443
|
if "browser_executable_path" in kwargs:
|
440
444
|
binary_location = kwargs["browser_executable_path"]
|
445
|
+
if binary_location and isinstance(binary_location, str):
|
446
|
+
binary_location = binary_location.strip()
|
441
447
|
else:
|
442
448
|
binary_location = detect_b_ver.get_binary_location("google-chrome")
|
443
|
-
if binary_location and
|
444
|
-
binary_location =
|
449
|
+
if binary_location and isinstance(binary_location, str):
|
450
|
+
binary_location = binary_location.strip()
|
451
|
+
if not os.path.exists(binary_location):
|
452
|
+
binary_location = None
|
445
453
|
if (
|
446
454
|
shared_utils.is_chrome_130_or_newer(binary_location)
|
447
455
|
and "user_data_dir" in kwargs
|
@@ -144,7 +144,8 @@ class Config:
|
|
144
144
|
"--disable-features=IsolateOrigins,site-per-process,Translate,"
|
145
145
|
"InsecureDownloadWarnings,DownloadBubble,DownloadBubbleV2,"
|
146
146
|
"OptimizationTargetPrediction,OptimizationGuideModelDownloading,"
|
147
|
-
"SidePanelPinning,UserAgentClientHint,PrivacySandboxSettings4"
|
147
|
+
"SidePanelPinning,UserAgentClientHint,PrivacySandboxSettings4,"
|
148
|
+
"DisableLoadExtensionCommandLineSwitch",
|
148
149
|
]
|
149
150
|
|
150
151
|
@property
|
@@ -347,6 +347,7 @@ class Connection(metaclass=CantTouchThis):
|
|
347
347
|
async def set_locale(self, locale: Optional[str] = None):
|
348
348
|
"""Sets the Language Locale code via set_user_agent_override."""
|
349
349
|
await self.set_user_agent(user_agent="", accept_language=locale)
|
350
|
+
await self.send(cdp.emulation.set_locale_override(locale))
|
350
351
|
|
351
352
|
async def set_timezone(self, timezone: Optional[str] = None):
|
352
353
|
"""Sets the Timezone via set_timezone_override."""
|
@@ -378,6 +379,36 @@ class Connection(metaclass=CantTouchThis):
|
|
378
379
|
accuracy=100,
|
379
380
|
))
|
380
381
|
|
382
|
+
async def set_auth(self, username, password, tab):
|
383
|
+
async def auth_challenge_handler(event: cdp.fetch.AuthRequired):
|
384
|
+
await tab.send(
|
385
|
+
cdp.fetch.continue_with_auth(
|
386
|
+
request_id=event.request_id,
|
387
|
+
auth_challenge_response=cdp.fetch.AuthChallengeResponse(
|
388
|
+
response="ProvideCredentials",
|
389
|
+
username=username,
|
390
|
+
password=password,
|
391
|
+
),
|
392
|
+
)
|
393
|
+
)
|
394
|
+
|
395
|
+
async def req_paused(event: cdp.fetch.RequestPaused):
|
396
|
+
await tab.send(
|
397
|
+
cdp.fetch.continue_request(request_id=event.request_id)
|
398
|
+
)
|
399
|
+
|
400
|
+
tab.add_handler(
|
401
|
+
cdp.fetch.RequestPaused,
|
402
|
+
lambda event: asyncio.create_task(req_paused(event)),
|
403
|
+
)
|
404
|
+
|
405
|
+
tab.add_handler(
|
406
|
+
cdp.fetch.AuthRequired,
|
407
|
+
lambda event: asyncio.create_task(auth_challenge_handler(event)),
|
408
|
+
)
|
409
|
+
|
410
|
+
await tab.send(cdp.fetch.enable(handle_auth_requests=True))
|
411
|
+
|
381
412
|
def __getattr__(self, item):
|
382
413
|
""":meta private:"""
|
383
414
|
try:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.39.
|
3
|
+
Version: 4.39.2
|
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
|
@@ -121,7 +121,8 @@ Requires-Dist: pytest-metadata==3.1.1
|
|
121
121
|
Requires-Dist: pytest-ordering==0.6
|
122
122
|
Requires-Dist: pytest-rerunfailures==14.0; python_version < "3.9"
|
123
123
|
Requires-Dist: pytest-rerunfailures==15.1; python_version >= "3.9"
|
124
|
-
Requires-Dist: pytest-xdist==3.6.1
|
124
|
+
Requires-Dist: pytest-xdist==3.6.1; python_version < "3.9"
|
125
|
+
Requires-Dist: pytest-xdist==3.7.0; python_version >= "3.9"
|
125
126
|
Requires-Dist: parameterized==0.9.0
|
126
127
|
Requires-Dist: behave==1.2.6
|
127
128
|
Requires-Dist: soupsieve==2.7
|
@@ -158,7 +159,7 @@ Provides-Extra: pdfminer
|
|
158
159
|
Requires-Dist: pdfminer.six==20250324; python_version < "3.9" and extra == "pdfminer"
|
159
160
|
Requires-Dist: pdfminer.six==20250506; python_version >= "3.9" and extra == "pdfminer"
|
160
161
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
161
|
-
Requires-Dist: cryptography==45.0.
|
162
|
+
Requires-Dist: cryptography==45.0.3; python_version >= "3.9" and extra == "pdfminer"
|
162
163
|
Requires-Dist: cffi==1.17.1; extra == "pdfminer"
|
163
164
|
Requires-Dist: pycparser==2.22; extra == "pdfminer"
|
164
165
|
Provides-Extra: pillow
|
@@ -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=lKg8cpa3sHnLx8LvY_0AE9MEapr-ETW6w2um2b_KvJA,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
|
@@ -30,13 +30,13 @@ seleniumbase/console_scripts/sb_mkchart.py,sha256=ep9g-9CSIwaOJKVxhB3xjRQpfsuApy
|
|
30
30
|
seleniumbase/console_scripts/sb_mkdir.py,sha256=iFN6ZMOgmH_GAvEuvzYltWuYiS3PRFQcL5fJIj1yX_Y,30897
|
31
31
|
seleniumbase/console_scripts/sb_mkfile.py,sha256=OWYd4yFccmjrd-gNn1t1una-HDRU2_N2-r4Tg3nHsj0,17744
|
32
32
|
seleniumbase/console_scripts/sb_mkpres.py,sha256=EWFRVacjYTX49y-fEiYTZacM9_01IxuuaO4nMjHrIGo,11015
|
33
|
-
seleniumbase/console_scripts/sb_mkrec.py,sha256=
|
33
|
+
seleniumbase/console_scripts/sb_mkrec.py,sha256=E268227Q75ZHP1rGFoIY_6i6FzGxD_kWmKm7QMntpW4,12012
|
34
34
|
seleniumbase/console_scripts/sb_objectify.py,sha256=nGxtVGL_nHj0bLHvk86znV3EABsE2_tjF74lgto1_Mk,122020
|
35
35
|
seleniumbase/console_scripts/sb_print.py,sha256=tNy-bMDgwHJO3bZxMpmo9weSE8uhbH0CUpP4VZqWxvI,30558
|
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=EwMup2zhgUGslHsjoeMPbKSD5-W92M2hKO6RiNqL06Q,242895
|
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
|
@@ -51,7 +51,7 @@ seleniumbase/core/recorder_helper.py,sha256=fNGjbapXmEsht54x1o6Igk198QdnPxDDnjUO
|
|
51
51
|
seleniumbase/core/report_helper.py,sha256=AIl6Qava2yW1uSzbLpJBlPlYDz0KE-rVhogh8hsGWBo,12201
|
52
52
|
seleniumbase/core/s3_manager.py,sha256=z_4qx2jI_gtK5r3niGXgEOBpfMUicUCOciowai50MP4,3529
|
53
53
|
seleniumbase/core/sb_cdp.py,sha256=zgkVXOhwf94NGdsUO0eM8yVUS3s5FzSuAPJNsz3lrZo,86452
|
54
|
-
seleniumbase/core/sb_driver.py,sha256=
|
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
|
57
57
|
seleniumbase/core/style_sheet.py,sha256=5qYN5GLk4gkwg7nqp3h0XH5YXRijANzKDuEdalzccuw,11714
|
@@ -62,7 +62,7 @@ seleniumbase/drivers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
62
62
|
seleniumbase/extensions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
63
63
|
seleniumbase/extensions/ad_block.zip,sha256=LTlaOYUs6a1Zu4op64pLoDEqYKJb8zHq_Y0PsBIIqCk,1454
|
64
64
|
seleniumbase/extensions/disable_csp.zip,sha256=5RvomXnm2PdivUVcxTV6jfvD8WhTEsQYHaQZe7nk9Yc,20014
|
65
|
-
seleniumbase/extensions/recorder.zip,sha256=
|
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
68
|
seleniumbase/fixtures/base_case.py,sha256=zlF10aFjJdRUS6nT9ksvcXPdyD7A_mlFyAgEuQkVRj4,727097
|
@@ -86,11 +86,11 @@ seleniumbase/plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hS
|
|
86
86
|
seleniumbase/plugins/base_plugin.py,sha256=ItLgtaZmu_363iycy8BNX0Do5LyIWGiTMLW6krXM-WQ,14748
|
87
87
|
seleniumbase/plugins/basic_test_info.py,sha256=8ov6n417gPbqqvrlT4zrch7l2XcRt-GF2ny6rR9AMWk,2108
|
88
88
|
seleniumbase/plugins/db_reporting_plugin.py,sha256=En09qUCoojrk9-vbcnsoHdSELoGmag2GDIyu3jTiJas,7331
|
89
|
-
seleniumbase/plugins/driver_manager.py,sha256=
|
89
|
+
seleniumbase/plugins/driver_manager.py,sha256=VSYQgDDA2t34gi-3qPkw5Ef9SX8sVQX3RETHOihyKHc,36558
|
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=ulTDorccan06eVYtSqlX26EFKXmS0gCY0huJ67Q5gTY,58082
|
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,10 +115,10 @@ 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=
|
120
|
-
seleniumbase/undetected/cdp_driver/config.py,sha256=
|
121
|
-
seleniumbase/undetected/cdp_driver/connection.py,sha256=
|
118
|
+
seleniumbase/undetected/cdp_driver/browser.py,sha256=5XVzfA6JQqh5q5ShKgSwjebB9n598leKZ4EYfG49bgs,34565
|
119
|
+
seleniumbase/undetected/cdp_driver/cdp_util.py,sha256=_DoF4EE1osbzSb3do-sIrMnL_Gse2S2vs3NUAuhGSAI,24819
|
120
|
+
seleniumbase/undetected/cdp_driver/config.py,sha256=4-nUkEf7JSuOdFMNd6XmJnFucZrA59-kH1FUMxDcgFU,12561
|
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
|
123
123
|
seleniumbase/undetected/cdp_driver/tab.py,sha256=t7Ucn0pmm7imwdCM-5KmIJNU2MCeMuIl6G3T2VMrbxU,53170
|
124
124
|
seleniumbase/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -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.2.dist-info/licenses/LICENSE,sha256=BRblZsX7HyPUjQmYTiyWr_e9tzWvmR3R4SFclM2R3W0,1085
|
139
|
+
seleniumbase-4.39.2.dist-info/METADATA,sha256=zpx8oqimtSYIkLI1km87q72UZwlGwX0xll23x7bCS5M,87206
|
140
|
+
seleniumbase-4.39.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
141
|
+
seleniumbase-4.39.2.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
|
142
|
+
seleniumbase-4.39.2.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
|
143
|
+
seleniumbase-4.39.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|