seleniumbase 4.34.11__py3-none-any.whl → 4.35.0__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 +68 -37
- seleniumbase/core/proxy_helper.py +8 -6
- seleniumbase/core/sb_cdp.py +193 -69
- seleniumbase/core/sb_driver.py +7 -0
- seleniumbase/extensions/ad_block.zip +0 -0
- seleniumbase/extensions/disable_csp.zip +0 -0
- seleniumbase/fixtures/base_case.py +38 -11
- seleniumbase/fixtures/js_utils.py +31 -9
- seleniumbase/plugins/base_plugin.py +12 -15
- seleniumbase/plugins/selenium_plugin.py +1 -0
- seleniumbase/undetected/__init__.py +16 -10
- seleniumbase/undetected/cdp_driver/browser.py +2 -0
- seleniumbase/undetected/cdp_driver/cdp_util.py +104 -2
- seleniumbase/undetected/cdp_driver/config.py +10 -0
- seleniumbase/undetected/webelement.py +3 -2
- {seleniumbase-4.34.11.dist-info → seleniumbase-4.35.0.dist-info}/METADATA +10 -10
- {seleniumbase-4.34.11.dist-info → seleniumbase-4.35.0.dist-info}/RECORD +22 -22
- {seleniumbase-4.34.11.dist-info → seleniumbase-4.35.0.dist-info}/LICENSE +0 -0
- {seleniumbase-4.34.11.dist-info → seleniumbase-4.35.0.dist-info}/WHEEL +0 -0
- {seleniumbase-4.34.11.dist-info → seleniumbase-4.35.0.dist-info}/entry_points.txt +0 -0
- {seleniumbase-4.34.11.dist-info → seleniumbase-4.35.0.dist-info}/top_level.txt +0 -0
seleniumbase/__version__.py
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.
|
2
|
+
__version__ = "4.35.0"
|
@@ -107,7 +107,7 @@ def make_driver_executable_if_not(driver_path):
|
|
107
107
|
shared_utils.make_executable(driver_path)
|
108
108
|
|
109
109
|
|
110
|
-
def extend_driver(driver):
|
110
|
+
def extend_driver(driver, proxy_auth=False, use_uc=True):
|
111
111
|
# Extend the driver with new methods
|
112
112
|
driver.default_find_element = driver.find_element
|
113
113
|
driver.default_find_elements = driver.find_elements
|
@@ -220,6 +220,7 @@ def extend_driver(driver):
|
|
220
220
|
driver.highlight_if_visible = DM.highlight_if_visible
|
221
221
|
driver.sleep = time.sleep
|
222
222
|
driver.get_attribute = DM.get_attribute
|
223
|
+
driver.get_parent = DM.get_parent
|
223
224
|
driver.get_current_url = DM.get_current_url
|
224
225
|
driver.get_page_source = DM.get_page_source
|
225
226
|
driver.get_title = DM.get_title
|
@@ -234,6 +235,8 @@ def extend_driver(driver):
|
|
234
235
|
driver.reset_window_size = DM.reset_window_size
|
235
236
|
if hasattr(driver, "proxy"):
|
236
237
|
driver.set_wire_proxy = DM.set_wire_proxy
|
238
|
+
if proxy_auth and not use_uc:
|
239
|
+
time.sleep(0.11) # Proxy needs moment to load in Manifest V3
|
237
240
|
return driver
|
238
241
|
|
239
242
|
|
@@ -647,6 +650,7 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
647
650
|
cdp.click_if_visible = CDPM.click_if_visible
|
648
651
|
cdp.click_visible_elements = CDPM.click_visible_elements
|
649
652
|
cdp.mouse_click = CDPM.mouse_click
|
653
|
+
cdp.get_parent = CDPM.get_parent
|
650
654
|
cdp.remove_element = CDPM.remove_element
|
651
655
|
cdp.remove_from_dom = CDPM.remove_from_dom
|
652
656
|
cdp.remove_elements = CDPM.remove_elements
|
@@ -714,7 +718,13 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
714
718
|
cdp.is_selected = CDPM.is_selected
|
715
719
|
cdp.is_element_present = CDPM.is_element_present
|
716
720
|
cdp.is_element_visible = CDPM.is_element_visible
|
721
|
+
cdp.is_text_visible = CDPM.is_text_visible
|
722
|
+
cdp.is_exact_text_visible = CDPM.is_exact_text_visible
|
723
|
+
cdp.wait_for_text = CDPM.wait_for_text
|
724
|
+
cdp.wait_for_text_not_visible = CDPM.wait_for_text_not_visible
|
717
725
|
cdp.wait_for_element_visible = CDPM.wait_for_element_visible
|
726
|
+
cdp.wait_for_element_not_visible = CDPM.wait_for_element_not_visible
|
727
|
+
cdp.wait_for_element_absent = CDPM.wait_for_element_absent
|
718
728
|
cdp.assert_element = CDPM.assert_element
|
719
729
|
cdp.assert_element_visible = CDPM.assert_element_visible
|
720
730
|
cdp.assert_element_present = CDPM.assert_element_present
|
@@ -727,6 +737,7 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
727
737
|
cdp.assert_url_contains = CDPM.assert_url_contains
|
728
738
|
cdp.assert_text = CDPM.assert_text
|
729
739
|
cdp.assert_exact_text = CDPM.assert_exact_text
|
740
|
+
cdp.assert_text_not_visible = CDPM.assert_text_not_visible
|
730
741
|
cdp.assert_true = CDPM.assert_true
|
731
742
|
cdp.assert_false = CDPM.assert_false
|
732
743
|
cdp.assert_equal = CDPM.assert_equal
|
@@ -1619,9 +1630,19 @@ def _uc_gui_handle_captcha_(driver, frame="iframe", ctype=None):
|
|
1619
1630
|
):
|
1620
1631
|
driver.uc_open_with_disconnect(driver.current_url, 3.8)
|
1621
1632
|
with suppress(Exception):
|
1633
|
+
if "--debug" in sys.argv:
|
1634
|
+
if sb_config._saved_cf_tab_count == 1:
|
1635
|
+
print(' <DEBUG> pyautogui.press("\\t")')
|
1636
|
+
else:
|
1637
|
+
print(
|
1638
|
+
' <DEBUG> pyautogui.press("\\t") * %s'
|
1639
|
+
% sb_config._saved_cf_tab_count
|
1640
|
+
)
|
1622
1641
|
for i in range(sb_config._saved_cf_tab_count):
|
1623
1642
|
pyautogui.press("\t")
|
1624
1643
|
time.sleep(0.027)
|
1644
|
+
if "--debug" in sys.argv:
|
1645
|
+
print(' <DEBUG> pyautogui.press(" ")')
|
1625
1646
|
pyautogui.press(" ")
|
1626
1647
|
else:
|
1627
1648
|
driver.disconnect()
|
@@ -2276,6 +2297,7 @@ def _set_chrome_options(
|
|
2276
2297
|
or proxy_string
|
2277
2298
|
):
|
2278
2299
|
chrome_options.add_argument("--ignore-certificate-errors")
|
2300
|
+
chrome_options.add_argument("--ignore-ssl-errors=yes")
|
2279
2301
|
if not enable_ws:
|
2280
2302
|
chrome_options.add_argument("--disable-web-security")
|
2281
2303
|
if (
|
@@ -2300,7 +2322,14 @@ def _set_chrome_options(
|
|
2300
2322
|
and not enable_3d_apis
|
2301
2323
|
):
|
2302
2324
|
chrome_options.add_argument("--disable-gpu")
|
2303
|
-
if
|
2325
|
+
if (
|
2326
|
+
(not IS_LINUX and is_using_uc(undetectable, browser_name))
|
2327
|
+
or (
|
2328
|
+
IS_MAC
|
2329
|
+
and binary_location
|
2330
|
+
and "chrome-headless-shell" in binary_location
|
2331
|
+
)
|
2332
|
+
):
|
2304
2333
|
chrome_options.add_argument("--disable-dev-shm-usage")
|
2305
2334
|
chrome_options.add_argument("--disable-application-cache")
|
2306
2335
|
if IS_LINUX:
|
@@ -3589,6 +3618,7 @@ def get_local_driver(
|
|
3589
3618
|
Can also be used to spin up additional browsers for the same test."""
|
3590
3619
|
downloads_path = DOWNLOADS_FOLDER
|
3591
3620
|
b_path = binary_location
|
3621
|
+
use_uc = is_using_uc(undetectable, browser_name)
|
3592
3622
|
if use_wire:
|
3593
3623
|
pip_find_lock = fasteners.InterProcessLock(
|
3594
3624
|
constants.PipInstall.FINDLOCK
|
@@ -4062,7 +4092,7 @@ def get_local_driver(
|
|
4062
4092
|
edge_options.add_argument("--headless=old")
|
4063
4093
|
else:
|
4064
4094
|
edge_options.add_argument("--headless")
|
4065
|
-
if mobile_emulator and not
|
4095
|
+
if mobile_emulator and not use_uc:
|
4066
4096
|
emulator_settings = {}
|
4067
4097
|
device_metrics = {}
|
4068
4098
|
if (
|
@@ -4126,7 +4156,7 @@ def get_local_driver(
|
|
4126
4156
|
settings.CHROME_START_HEIGHT,
|
4127
4157
|
)
|
4128
4158
|
)
|
4129
|
-
if user_data_dir and not
|
4159
|
+
if user_data_dir and not use_uc:
|
4130
4160
|
abs_path = os.path.abspath(user_data_dir)
|
4131
4161
|
edge_options.add_argument("--user-data-dir=%s" % abs_path)
|
4132
4162
|
if extension_zip:
|
@@ -4161,7 +4191,7 @@ def get_local_driver(
|
|
4161
4191
|
edge_options.add_argument("--disable-prompt-on-repost")
|
4162
4192
|
if not enable_3d_apis:
|
4163
4193
|
edge_options.add_argument("--disable-3d-apis")
|
4164
|
-
if headless or headless2 or
|
4194
|
+
if headless or headless2 or use_uc:
|
4165
4195
|
edge_options.add_argument("--disable-renderer-backgrounding")
|
4166
4196
|
edge_options.add_argument("--disable-backgrounding-occluded-windows")
|
4167
4197
|
edge_options.add_argument("--disable-client-side-phishing-detection")
|
@@ -4226,6 +4256,7 @@ def get_local_driver(
|
|
4226
4256
|
edge_options.add_argument("--log-level=3")
|
4227
4257
|
edge_options.add_argument("--no-first-run")
|
4228
4258
|
edge_options.add_argument("--ignore-certificate-errors")
|
4259
|
+
edge_options.add_argument("--ignore-ssl-errors=yes")
|
4229
4260
|
if devtools and not headless:
|
4230
4261
|
edge_options.add_argument("--auto-open-devtools-for-tabs")
|
4231
4262
|
edge_options.add_argument("--allow-file-access-from-files")
|
@@ -4233,10 +4264,7 @@ def get_local_driver(
|
|
4233
4264
|
edge_options.add_argument("--allow-running-insecure-content")
|
4234
4265
|
if user_agent:
|
4235
4266
|
edge_options.add_argument("--user-agent=%s" % user_agent)
|
4236
|
-
if (
|
4237
|
-
IS_LINUX
|
4238
|
-
or (IS_MAC and not is_using_uc(undetectable, browser_name))
|
4239
|
-
):
|
4267
|
+
if IS_LINUX or (IS_MAC and not use_uc):
|
4240
4268
|
edge_options.add_argument("--no-sandbox")
|
4241
4269
|
if remote_debug:
|
4242
4270
|
# To access the Debugger, go to: edge://inspect/#devices
|
@@ -4250,10 +4278,7 @@ def get_local_driver(
|
|
4250
4278
|
if swiftshader:
|
4251
4279
|
edge_options.add_argument("--use-gl=angle")
|
4252
4280
|
edge_options.add_argument("--use-angle=swiftshader-webgl")
|
4253
|
-
elif
|
4254
|
-
not is_using_uc(undetectable, browser_name)
|
4255
|
-
and not enable_3d_apis
|
4256
|
-
):
|
4281
|
+
elif not use_uc and not enable_3d_apis:
|
4257
4282
|
edge_options.add_argument("--disable-gpu")
|
4258
4283
|
if IS_LINUX:
|
4259
4284
|
edge_options.add_argument("--disable-dev-shm-usage")
|
@@ -4500,14 +4525,14 @@ def get_local_driver(
|
|
4500
4525
|
and len(saved_mcv.split(".")) == 4
|
4501
4526
|
):
|
4502
4527
|
driver_version = saved_mcv
|
4503
|
-
if
|
4528
|
+
if use_uc:
|
4504
4529
|
use_br_version_for_uc = True
|
4505
4530
|
if (
|
4506
4531
|
(headless or headless2)
|
4507
4532
|
and IS_WINDOWS
|
4508
4533
|
and major_chrome_version
|
4509
4534
|
and int(major_chrome_version) >= 117
|
4510
|
-
and not
|
4535
|
+
and not use_uc
|
4511
4536
|
and not (remote_debug or devtools or use_wire)
|
4512
4537
|
and not (proxy_string or multi_proxy or proxy_pac_url)
|
4513
4538
|
and (not chromium_arg or "debug" not in chromium_arg)
|
@@ -4563,7 +4588,7 @@ def get_local_driver(
|
|
4563
4588
|
use_version = ch_driver_version
|
4564
4589
|
disable_build_check = True
|
4565
4590
|
uc_driver_version = None
|
4566
|
-
if
|
4591
|
+
if use_uc:
|
4567
4592
|
if use_br_version_for_uc or driver_version == "mlatest":
|
4568
4593
|
uc_driver_version = get_uc_driver_version(full=True)
|
4569
4594
|
full_ch_driver_version = uc_driver_version
|
@@ -4624,7 +4649,6 @@ def get_local_driver(
|
|
4624
4649
|
"\nWarning: Could not make chromedriver"
|
4625
4650
|
" executable: %s" % e
|
4626
4651
|
)
|
4627
|
-
use_uc = is_using_uc(undetectable, browser_name)
|
4628
4652
|
make_uc_driver_from_chromedriver = False
|
4629
4653
|
local_ch_exists = (
|
4630
4654
|
LOCAL_CHROMEDRIVER and os.path.exists(LOCAL_CHROMEDRIVER)
|
@@ -4841,7 +4865,7 @@ def get_local_driver(
|
|
4841
4865
|
service_args = []
|
4842
4866
|
if disable_build_check:
|
4843
4867
|
service_args = ["--disable-build-check"]
|
4844
|
-
if
|
4868
|
+
if use_uc:
|
4845
4869
|
uc_lock = fasteners.InterProcessLock(
|
4846
4870
|
constants.MultiBrowser.DRIVER_FIXING_LOCK
|
4847
4871
|
)
|
@@ -4870,20 +4894,14 @@ def get_local_driver(
|
|
4870
4894
|
"\nWarning: Could not make uc_driver"
|
4871
4895
|
" executable: %s" % e
|
4872
4896
|
)
|
4873
|
-
if
|
4874
|
-
not headless
|
4875
|
-
or not IS_LINUX
|
4876
|
-
or is_using_uc(undetectable, browser_name)
|
4877
|
-
):
|
4897
|
+
if not headless or not IS_LINUX or use_uc:
|
4878
4898
|
uc_activated = False
|
4879
4899
|
try:
|
4880
|
-
if (
|
4881
|
-
os.path.exists(LOCAL_CHROMEDRIVER)
|
4882
|
-
or is_using_uc(undetectable, browser_name)
|
4883
|
-
):
|
4900
|
+
if os.path.exists(LOCAL_CHROMEDRIVER) or use_uc:
|
4884
4901
|
if headless and not IS_LINUX:
|
4885
4902
|
undetectable = False # No support for headless
|
4886
|
-
|
4903
|
+
use_uc = is_using_uc(undetectable, browser_name)
|
4904
|
+
if use_uc:
|
4887
4905
|
from seleniumbase import undetected
|
4888
4906
|
from urllib.error import URLError
|
4889
4907
|
if IS_LINUX:
|
@@ -5183,7 +5201,7 @@ def get_local_driver(
|
|
5183
5201
|
driver = webdriver.Chrome(
|
5184
5202
|
service=service, options=chrome_options
|
5185
5203
|
)
|
5186
|
-
return extend_driver(driver)
|
5204
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5187
5205
|
if not auto_upgrade_chromedriver:
|
5188
5206
|
raise # Not an obvious fix.
|
5189
5207
|
else:
|
@@ -5394,6 +5412,19 @@ def get_local_driver(
|
|
5394
5412
|
)
|
5395
5413
|
driver._is_hidden = (headless or headless2)
|
5396
5414
|
driver._is_using_uc = True
|
5415
|
+
with suppress(Exception):
|
5416
|
+
if int(uc_driver_version) >= 133:
|
5417
|
+
for window_handle in driver.window_handles:
|
5418
|
+
driver.switch_to.window(window_handle)
|
5419
|
+
if driver.current_url.startswith(
|
5420
|
+
"chrome-extension://"
|
5421
|
+
):
|
5422
|
+
driver.close()
|
5423
|
+
time.sleep(0.003)
|
5424
|
+
driver.switch_to.window(driver.window_handles[0])
|
5425
|
+
time.sleep(0.003)
|
5426
|
+
driver.connect()
|
5427
|
+
time.sleep(0.003)
|
5397
5428
|
if mobile_emulator:
|
5398
5429
|
uc_metrics = {}
|
5399
5430
|
if (
|
@@ -5421,11 +5452,11 @@ def get_local_driver(
|
|
5421
5452
|
'Emulation.setDeviceMetricsOverride',
|
5422
5453
|
set_device_metrics_override
|
5423
5454
|
)
|
5424
|
-
return extend_driver(driver)
|
5455
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5425
5456
|
else: # Running headless on Linux (and not using --uc)
|
5426
5457
|
try:
|
5427
5458
|
driver = webdriver.Chrome(options=chrome_options)
|
5428
|
-
return extend_driver(driver)
|
5459
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5429
5460
|
except Exception as e:
|
5430
5461
|
if not hasattr(e, "msg"):
|
5431
5462
|
raise
|
@@ -5447,7 +5478,7 @@ def get_local_driver(
|
|
5447
5478
|
driver = webdriver.Chrome(
|
5448
5479
|
service=service, options=chrome_options
|
5449
5480
|
)
|
5450
|
-
return extend_driver(driver)
|
5481
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5451
5482
|
mcv = None # Major Chrome Version
|
5452
5483
|
if "Current browser version is " in e.msg:
|
5453
5484
|
line = e.msg.split("Current browser version is ")[1]
|
@@ -5490,7 +5521,7 @@ def get_local_driver(
|
|
5490
5521
|
service=service,
|
5491
5522
|
options=chrome_options,
|
5492
5523
|
)
|
5493
|
-
return extend_driver(driver)
|
5524
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5494
5525
|
# Use the virtual display on Linux during headless errors
|
5495
5526
|
logging.debug(
|
5496
5527
|
"\nWarning: Chrome failed to launch in"
|
@@ -5508,9 +5539,9 @@ def get_local_driver(
|
|
5508
5539
|
driver = webdriver.Chrome(
|
5509
5540
|
service=service, options=chrome_options
|
5510
5541
|
)
|
5511
|
-
return extend_driver(driver)
|
5542
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5512
5543
|
except Exception as original_exception:
|
5513
|
-
if
|
5544
|
+
if use_uc:
|
5514
5545
|
raise
|
5515
5546
|
# Try again if Chrome didn't launch
|
5516
5547
|
with suppress(Exception):
|
@@ -5518,7 +5549,7 @@ def get_local_driver(
|
|
5518
5549
|
driver = webdriver.Chrome(
|
5519
5550
|
service=service, options=chrome_options
|
5520
5551
|
)
|
5521
|
-
return extend_driver(driver)
|
5552
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5522
5553
|
if user_data_dir:
|
5523
5554
|
print("\nUnable to set user_data_dir while starting Chrome!\n")
|
5524
5555
|
raise
|
@@ -5545,7 +5576,7 @@ def get_local_driver(
|
|
5545
5576
|
)
|
5546
5577
|
try:
|
5547
5578
|
driver = webdriver.Chrome(service=service)
|
5548
|
-
return extend_driver(driver)
|
5579
|
+
return extend_driver(driver, proxy_auth, use_uc)
|
5549
5580
|
except Exception:
|
5550
5581
|
raise original_exception
|
5551
5582
|
else:
|
@@ -40,7 +40,7 @@ def create_proxy_ext(
|
|
40
40
|
""" mode: "fixed_servers",\n"""
|
41
41
|
""" rules: {\n"""
|
42
42
|
""" singleProxy: {\n"""
|
43
|
-
""" scheme:
|
43
|
+
""" scheme: "http",\n"""
|
44
44
|
""" host: "%s",\n"""
|
45
45
|
""" port: parseInt("%s")\n"""
|
46
46
|
""" },\n"""
|
@@ -94,21 +94,23 @@ def create_proxy_ext(
|
|
94
94
|
manifest_json = (
|
95
95
|
"""{\n"""
|
96
96
|
""""version": "1.0.0",\n"""
|
97
|
-
""""manifest_version":
|
97
|
+
""""manifest_version": 3,\n"""
|
98
98
|
""""name": "Chrome Proxy",\n"""
|
99
99
|
""""permissions": [\n"""
|
100
100
|
""" "proxy",\n"""
|
101
101
|
""" "tabs",\n"""
|
102
102
|
""" "unlimitedStorage",\n"""
|
103
103
|
""" "storage",\n"""
|
104
|
-
""" "<all_urls>",\n"""
|
105
104
|
""" "webRequest",\n"""
|
106
|
-
""" "
|
105
|
+
""" "webRequestAuthProvider"\n"""
|
106
|
+
"""],\n"""
|
107
|
+
""""host_permissions": [\n"""
|
108
|
+
""" "<all_urls>"\n"""
|
107
109
|
"""],\n"""
|
108
110
|
""""background": {\n"""
|
109
|
-
""" "
|
111
|
+
""" "service_worker": "background.js"\n"""
|
110
112
|
"""},\n"""
|
111
|
-
""""minimum_chrome_version":"
|
113
|
+
""""minimum_chrome_version":"88.0.0"\n"""
|
112
114
|
"""}"""
|
113
115
|
)
|
114
116
|
abs_path = os.path.abspath(".")
|