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.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.34.11"
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 not IS_LINUX and is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name)
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 is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name):
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
- if is_using_uc(undetectable, browser_name):
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 is_using_uc(undetectable, browser_name):
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: ["http", "https", "socks4", "socks5"],\n"""
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": 2,\n"""
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
- """ "webRequestBlocking"\n"""
105
+ """ "webRequestAuthProvider"\n"""
106
+ """],\n"""
107
+ """"host_permissions": [\n"""
108
+ """ "<all_urls>"\n"""
107
109
  """],\n"""
108
110
  """"background": {\n"""
109
- """ "scripts": ["background.js"]\n"""
111
+ """ "service_worker": "background.js"\n"""
110
112
  """},\n"""
111
- """"minimum_chrome_version":"22.0.0"\n"""
113
+ """"minimum_chrome_version":"88.0.0"\n"""
112
114
  """}"""
113
115
  )
114
116
  abs_path = os.path.abspath(".")