seleniumbase 4.28.4__py3-none-any.whl → 4.28.5__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.28.4"
2
+ __version__ = "4.28.5"
@@ -660,7 +660,7 @@ def get_gui_element_position(driver, selector):
660
660
  return (viewport_x, viewport_y)
661
661
 
662
662
 
663
- def uc_gui_click_x_y(driver, x, y, timeframe=0.25, uc_lock=True):
663
+ def _uc_gui_click_x_y(driver, x, y, timeframe=0.25, uc_lock=False):
664
664
  install_pyautogui_if_missing(driver)
665
665
  import pyautogui
666
666
  pyautogui = get_configured_pyautogui(pyautogui)
@@ -678,7 +678,7 @@ def uc_gui_click_x_y(driver, x, y, timeframe=0.25, uc_lock=True):
678
678
  with gui_lock: # Prevent issues with multiple processes
679
679
  pyautogui.moveTo(x, y, timeframe, pyautogui.easeOutQuad)
680
680
  if timeframe >= 0.25:
681
- time.sleep(0.0555) # Wait if moving at human-speed
681
+ time.sleep(0.056) # Wait if moving at human-speed
682
682
  if "--debug" in sys.argv:
683
683
  print(" <DEBUG> pyautogui.click(%s, %s)" % (x, y))
684
684
  pyautogui.click(x=x, y=y)
@@ -686,30 +686,71 @@ def uc_gui_click_x_y(driver, x, y, timeframe=0.25, uc_lock=True):
686
686
  # Called from a method where the gui_lock is already active
687
687
  pyautogui.moveTo(x, y, timeframe, pyautogui.easeOutQuad)
688
688
  if timeframe >= 0.25:
689
- time.sleep(0.0555) # Wait if moving at human-speed
689
+ time.sleep(0.056) # Wait if moving at human-speed
690
690
  if "--debug" in sys.argv:
691
691
  print(" <DEBUG> pyautogui.click(%s, %s)" % (x, y))
692
692
  pyautogui.click(x=x, y=y)
693
693
 
694
694
 
695
- def on_a_cf_turnstile_page(driver):
695
+ def uc_gui_click_x_y(driver, x, y, timeframe=0.25):
696
+ _uc_gui_click_x_y(driver, x, y, timeframe=timeframe, uc_lock=True)
697
+
698
+
699
+ def _on_a_cf_turnstile_page(driver):
696
700
  source = driver.get_page_source()
697
701
  if (
698
- "//challenges.cloudflare.com" in source
699
- or 'aria-label="Cloudflare"' in source
702
+ 'data-callback="onCaptchaSuccess"' in source
703
+ or "cf-turnstile-wrapper" in source
700
704
  ):
701
705
  return True
702
706
  return False
703
707
 
704
708
 
705
- def uc_gui_click_cf(driver, frame="iframe", retry=False, blind=False):
706
- if not on_a_cf_turnstile_page(driver):
707
- return
709
+ def _on_a_g_recaptcha_page(driver):
710
+ source = driver.get_page_source()
711
+ if (
712
+ 'id="recaptcha-token"' in source
713
+ or 'title="reCAPTCHA"' in source
714
+ ):
715
+ return True
716
+ return False
717
+
718
+
719
+ def _uc_gui_click_captcha(
720
+ driver,
721
+ frame="iframe",
722
+ retry=False,
723
+ blind=False,
724
+ ctype=None,
725
+ ):
726
+ _on_a_captcha_page = None
727
+ if ctype == "cf_t":
728
+ if not _on_a_cf_turnstile_page(driver):
729
+ return
730
+ else:
731
+ _on_a_captcha_page = _on_a_cf_turnstile_page
732
+ elif ctype == "g_rc":
733
+ if not _on_a_g_recaptcha_page(driver):
734
+ return
735
+ else:
736
+ _on_a_captcha_page = _on_a_g_recaptcha_page
737
+ else:
738
+ if _on_a_g_recaptcha_page(driver):
739
+ ctype = "g_rc"
740
+ _on_a_captcha_page = _on_a_g_recaptcha_page
741
+ elif _on_a_cf_turnstile_page(driver):
742
+ ctype = "cf_t"
743
+ _on_a_captcha_page = _on_a_cf_turnstile_page
744
+ else:
745
+ return
708
746
  install_pyautogui_if_missing(driver)
709
747
  import pyautogui
710
748
  pyautogui = get_configured_pyautogui(pyautogui)
749
+ i_x = None
750
+ i_y = None
711
751
  x = None
712
752
  y = None
753
+ visible_iframe = True
713
754
  gui_lock = fasteners.InterProcessLock(
714
755
  constants.MultiBrowser.PYAUTOGUILOCK
715
756
  )
@@ -725,22 +766,54 @@ def uc_gui_click_cf(driver, frame="iframe", retry=False, blind=False):
725
766
  page_actions.switch_to_window(
726
767
  driver, driver.current_window_handle, 2, uc_lock=False
727
768
  )
769
+ if ctype == "cf_t":
770
+ if (
771
+ driver.is_element_present(".cf-turnstile-wrapper iframe")
772
+ or driver.is_element_present(
773
+ '[data-callback="onCaptchaSuccess"] iframe'
774
+ )
775
+ ):
776
+ pass
777
+ else:
778
+ visible_iframe = False
779
+ if driver.is_element_present(".cf-turnstile-wrapper"):
780
+ frame = ".cf-turnstile-wrapper"
781
+ elif driver.is_element_present(
782
+ '[data-callback="onCaptchaSuccess"]'
783
+ ):
784
+ frame = '[data-callback="onCaptchaSuccess"]'
785
+ else:
786
+ return
728
787
  if not is_in_frame or needs_switch:
729
788
  # Currently not in frame (or nested frame outside CF one)
730
789
  try:
731
- i_x, i_y = get_gui_element_position(driver, "iframe")
732
- driver.switch_to_frame(frame)
790
+ i_x, i_y = get_gui_element_position(driver, frame)
791
+ if visible_iframe:
792
+ driver.switch_to_frame(frame)
733
793
  except Exception:
734
- if driver.is_element_present("iframe"):
735
- i_x, i_y = get_gui_element_position(driver, "iframe")
736
- driver.switch_to_frame("iframe")
737
- else:
738
- return
794
+ if visible_iframe:
795
+ if driver.is_element_present("iframe"):
796
+ i_x, i_y = get_gui_element_position(driver, "iframe")
797
+ driver.switch_to_frame("iframe")
798
+ else:
799
+ return
800
+ if not i_x or not i_y:
801
+ return
739
802
  try:
740
- selector = "span"
741
- element = driver.wait_for_element_present(selector, timeout=2.5)
742
- x = i_x + element.rect["x"] + int(element.rect["width"] / 2) + 1
743
- y = i_y + element.rect["y"] + int(element.rect["height"] / 2) + 1
803
+ if visible_iframe:
804
+ selector = "span"
805
+ if ctype == "g_rc":
806
+ selector = "span.recaptcha-checkbox"
807
+ element = driver.wait_for_element_present(
808
+ selector, timeout=2.5
809
+ )
810
+ x = i_x + element.rect["x"] + int(element.rect["width"] / 2)
811
+ x += 1
812
+ y = i_y + element.rect["y"] + int(element.rect["height"] / 2)
813
+ y += 1
814
+ else:
815
+ x = i_x + 34
816
+ y = i_y + 34
744
817
  driver.switch_to.default_content()
745
818
  except Exception:
746
819
  try:
@@ -751,46 +824,91 @@ def uc_gui_click_cf(driver, frame="iframe", retry=False, blind=False):
751
824
  try:
752
825
  if x and y:
753
826
  sb_config._saved_cf_x_y = (x, y)
754
- uc_gui_click_x_y(driver, x, y, timeframe=0.842, uc_lock=False)
827
+ _uc_gui_click_x_y(driver, x, y, timeframe=0.95)
755
828
  except Exception:
756
829
  pass
757
830
  reconnect_time = (float(constants.UC.RECONNECT_TIME) / 2.0) + 0.5
758
831
  if IS_LINUX:
759
- reconnect_time = constants.UC.RECONNECT_TIME
832
+ reconnect_time = constants.UC.RECONNECT_TIME + 0.15
760
833
  if not x or not y:
761
834
  reconnect_time = 1 # Make it quick (it already failed)
762
835
  driver.reconnect(reconnect_time)
763
836
  if blind:
764
837
  retry = True
765
- if retry and x and y and on_a_cf_turnstile_page(driver):
838
+ if retry and x and y and _on_a_captcha_page(driver):
766
839
  with gui_lock: # Prevent issues with multiple processes
767
840
  # Make sure the window is on top
768
841
  page_actions.switch_to_window(
769
842
  driver, driver.current_window_handle, 2, uc_lock=False
770
843
  )
771
- driver.switch_to_frame("iframe")
772
- if driver.is_element_visible("#success-icon"):
773
- driver.switch_to.parent_frame()
844
+ if not driver.is_element_present("iframe"):
774
845
  return
846
+ else:
847
+ try:
848
+ driver.switch_to_frame(frame)
849
+ except Exception:
850
+ try:
851
+ driver.switch_to_frame("iframe")
852
+ except Exception:
853
+ return
854
+ checkbox_success = None
855
+ if ctype == "cf_t":
856
+ checkbox_success = "#success-icon"
857
+ elif ctype == "g_rc":
858
+ checkbox_success = "span.recaptcha-checkbox-checked"
859
+ else:
860
+ return # If this line is reached, ctype wasn't set
861
+ if driver.is_element_visible("#success-icon"):
862
+ driver.switch_to.parent_frame(checkbox_success)
863
+ return
775
864
  if blind:
776
865
  driver.uc_open_with_disconnect(driver.current_url, 3.8)
777
- uc_gui_click_x_y(driver, x, y, timeframe=1.05, uc_lock=False)
866
+ _uc_gui_click_x_y(driver, x, y, timeframe=1.05)
778
867
  else:
779
868
  driver.uc_open_with_reconnect(driver.current_url, 3.8)
780
- if on_a_cf_turnstile_page(driver):
869
+ if _on_a_captcha_page(driver):
781
870
  driver.disconnect()
782
- uc_gui_click_x_y(
783
- driver, x, y, timeframe=1.05, uc_lock=False
784
- )
871
+ _uc_gui_click_x_y(driver, x, y, timeframe=1.05)
785
872
  driver.reconnect(reconnect_time)
786
873
 
787
874
 
875
+ def uc_gui_click_captcha(driver, frame="iframe", retry=False, blind=False):
876
+ _uc_gui_click_captcha(
877
+ driver,
878
+ frame=frame,
879
+ retry=retry,
880
+ blind=blind,
881
+ ctype=None,
882
+ )
883
+
884
+
885
+ def uc_gui_click_rc(driver, frame="iframe", retry=False, blind=False):
886
+ _uc_gui_click_captcha(
887
+ driver,
888
+ frame=frame,
889
+ retry=retry,
890
+ blind=blind,
891
+ ctype="g_rc",
892
+ )
893
+
894
+
895
+ def uc_gui_click_cf(driver, frame="iframe", retry=False, blind=False):
896
+ _uc_gui_click_captcha(
897
+ driver,
898
+ frame=frame,
899
+ retry=retry,
900
+ blind=blind,
901
+ ctype="cf_t",
902
+ )
903
+
904
+
788
905
  def uc_gui_handle_cf(driver, frame="iframe"):
789
- if not on_a_cf_turnstile_page(driver):
906
+ if not _on_a_cf_turnstile_page(driver):
790
907
  return
791
908
  install_pyautogui_if_missing(driver)
792
909
  import pyautogui
793
910
  pyautogui = get_configured_pyautogui(pyautogui)
911
+ visible_iframe = True
794
912
  gui_lock = fasteners.InterProcessLock(
795
913
  constants.MultiBrowser.PYAUTOGUILOCK
796
914
  )
@@ -806,16 +924,46 @@ def uc_gui_handle_cf(driver, frame="iframe"):
806
924
  page_actions.switch_to_window(
807
925
  driver, driver.current_window_handle, 2, uc_lock=False
808
926
  )
927
+ if (
928
+ driver.is_element_present(".cf-turnstile-wrapper iframe")
929
+ or driver.is_element_present(
930
+ '[data-callback="onCaptchaSuccess"] iframe'
931
+ )
932
+ ):
933
+ pass
934
+ else:
935
+ visible_iframe = False
936
+ if driver.is_element_present(".cf-turnstile-wrapper"):
937
+ frame = ".cf-turnstile-wrapper"
938
+ elif driver.is_element_present(
939
+ '[data-callback="onCaptchaSuccess"]'
940
+ ):
941
+ frame = '[data-callback="onCaptchaSuccess"]'
942
+ else:
943
+ return
809
944
  if not is_in_frame or needs_switch:
810
945
  # Currently not in frame (or nested frame outside CF one)
811
946
  try:
812
- driver.switch_to_frame(frame)
947
+ if visible_iframe:
948
+ driver.switch_to_frame(frame)
813
949
  except Exception:
814
- if driver.is_element_present("iframe"):
815
- driver.switch_to_frame("iframe")
816
- else:
817
- return
950
+ if visible_iframe:
951
+ if driver.is_element_present("iframe"):
952
+ driver.switch_to_frame("iframe")
953
+ else:
954
+ return
818
955
  try:
956
+ found_checkbox = False
957
+ for i in range(10):
958
+ pyautogui.press("\t")
959
+ time.sleep(0.02)
960
+ active_element_css = js_utils.get_active_element_css(driver)
961
+ if active_element_css == "div.cf-turnstile-wrapper":
962
+ found_checkbox = True
963
+ break
964
+ time.sleep(0.02)
965
+ if not found_checkbox:
966
+ return
819
967
  driver.execute_script('document.querySelector("input").focus()')
820
968
  except Exception:
821
969
  try:
@@ -829,7 +977,7 @@ def uc_gui_handle_cf(driver, frame="iframe"):
829
977
  pass
830
978
  reconnect_time = (float(constants.UC.RECONNECT_TIME) / 2.0) + 0.5
831
979
  if IS_LINUX:
832
- reconnect_time = constants.UC.RECONNECT_TIME
980
+ reconnect_time = constants.UC.RECONNECT_TIME + 0.15
833
981
  driver.reconnect(reconnect_time)
834
982
 
835
983
 
@@ -4166,6 +4314,16 @@ def get_local_driver(
4166
4314
  driver, *args, **kwargs
4167
4315
  )
4168
4316
  )
4317
+ driver.uc_gui_click_captcha = (
4318
+ lambda *args, **kwargs: uc_gui_click_captcha(
4319
+ driver, *args, **kwargs
4320
+ )
4321
+ )
4322
+ driver.uc_gui_click_rc = (
4323
+ lambda *args, **kwargs: uc_gui_click_rc(
4324
+ driver, *args, **kwargs
4325
+ )
4326
+ )
4169
4327
  driver.uc_gui_click_cf = (
4170
4328
  lambda *args, **kwargs: uc_gui_click_cf(
4171
4329
  driver, *args, **kwargs
@@ -4242,6 +4242,10 @@ class BaseCase(unittest.TestCase):
4242
4242
  self.uc_gui_write = new_driver.uc_gui_write
4243
4243
  if hasattr(new_driver, "uc_gui_click_x_y"):
4244
4244
  self.uc_gui_click_x_y = new_driver.uc_gui_click_x_y
4245
+ if hasattr(new_driver, "uc_gui_click_captcha"):
4246
+ self.uc_gui_click_captcha = new_driver.uc_gui_click_captcha
4247
+ if hasattr(new_driver, "uc_gui_click_rc"):
4248
+ self.uc_gui_click_rc = new_driver.uc_gui_click_rc
4245
4249
  if hasattr(new_driver, "uc_gui_click_cf"):
4246
4250
  self.uc_gui_click_cf = new_driver.uc_gui_click_cf
4247
4251
  if hasattr(new_driver, "uc_gui_handle_cf"):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.28.4
3
+ Version: 4.28.5
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
@@ -94,7 +94,7 @@ Requires-Dist: mdurl ==0.1.2
94
94
  Requires-Dist: rich ==13.7.1
95
95
  Requires-Dist: python-xlib ==0.33 ; platform_system == "Linux"
96
96
  Requires-Dist: pyreadline3 ==3.4.1 ; platform_system == "Windows"
97
- Requires-Dist: urllib3 <2,>=1.26.18 ; python_version < "3.10"
97
+ Requires-Dist: urllib3 <2,>=1.26.19 ; python_version < "3.10"
98
98
  Requires-Dist: pip >=24.0 ; python_version < "3.8"
99
99
  Requires-Dist: packaging >=24.0 ; python_version < "3.8"
100
100
  Requires-Dist: setuptools >=68.0.0 ; python_version < "3.8"
@@ -112,8 +112,8 @@ Requires-Dist: pytest-xdist ==3.5.0 ; python_version < "3.8"
112
112
  Requires-Dist: soupsieve ==2.4.1 ; python_version < "3.8"
113
113
  Requires-Dist: pygments ==2.17.2 ; python_version < "3.8"
114
114
  Requires-Dist: markdown-it-py ==2.2.0 ; python_version < "3.8"
115
- Requires-Dist: urllib3 <2.3.0,>=1.26.18 ; python_version >= "3.10"
116
- Requires-Dist: pip >=24.1.1 ; python_version >= "3.8"
115
+ Requires-Dist: urllib3 <2.3.0,>=1.26.19 ; python_version >= "3.10"
116
+ Requires-Dist: pip >=24.1.2 ; python_version >= "3.8"
117
117
  Requires-Dist: packaging >=24.1 ; python_version >= "3.8"
118
118
  Requires-Dist: setuptools >=70.2.0 ; python_version >= "3.8"
119
119
  Requires-Dist: wheel >=0.43.0 ; python_version >= "3.8"
@@ -157,7 +157,7 @@ Requires-Dist: pycparser ==2.22 ; extra == 'pdfminer'
157
157
  Requires-Dist: pdfminer.six ==20221105 ; (python_version < "3.8") and extra == 'pdfminer'
158
158
  Requires-Dist: cffi ==1.15.1 ; (python_version < "3.8") and extra == 'pdfminer'
159
159
  Requires-Dist: cryptography ==39.0.2 ; (python_version < "3.9") and extra == 'pdfminer'
160
- Requires-Dist: pdfminer.six ==20231228 ; (python_version >= "3.8") and extra == 'pdfminer'
160
+ Requires-Dist: pdfminer.six ==20240706 ; (python_version >= "3.8") and extra == 'pdfminer'
161
161
  Requires-Dist: cffi ==1.16.0 ; (python_version >= "3.8") and extra == 'pdfminer'
162
162
  Requires-Dist: cryptography ==42.0.8 ; (python_version >= "3.9") and extra == 'pdfminer'
163
163
  Provides-Extra: pillow
@@ -168,7 +168,7 @@ Requires-Dist: pip-system-certs ==4.0 ; (platform_system == "Windows") and extra
168
168
  Provides-Extra: proxy
169
169
  Requires-Dist: proxy.py ==2.4.3 ; extra == 'proxy'
170
170
  Provides-Extra: psutil
171
- Requires-Dist: psutil ==5.9.8 ; extra == 'psutil'
171
+ Requires-Dist: psutil ==6.0.0 ; extra == 'psutil'
172
172
  Provides-Extra: pyautogui
173
173
  Requires-Dist: PyAutoGUI ==0.9.54 ; extra == 'pyautogui'
174
174
  Provides-Extra: selenium-stealth
@@ -5,7 +5,7 @@ sbase/steps.py,sha256=bKT_u5bJkKzYWEuAXi9NVVRYYxQRCM1_YJUrNFFRVPY,42865
5
5
  seleniumbase/ReadMe.md,sha256=4nEdto4d0Ch0Zneg0yAC-RBBdqRqPUP0SCo-ze_XDPM,3612
6
6
  seleniumbase/__init__.py,sha256=dgq30q6wGO2fJOVYemxC5hLxzv-of-MRn5P1YarBq5k,2263
7
7
  seleniumbase/__main__.py,sha256=dn1p6dgCchmcH1zzTzzQvFwwdQQqnTGH6ULV9m4hv24,654
8
- seleniumbase/__version__.py,sha256=GqsU2Pnospr9PDFlGL11hfJERXvsfTuOee7ww0lKDl8,46
8
+ seleniumbase/__version__.py,sha256=fi9wVefZcn8xh6-DIKJewbq8lsrNyHHdHJOlTqp3mcE,46
9
9
  seleniumbase/behave/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  seleniumbase/behave/behave_helper.py,sha256=elkl8P9eLulRAioLstE9baYNM9N_PHBmAOcajX-pH_Y,24198
11
11
  seleniumbase/behave/behave_sb.py,sha256=q4uYZixZBf7VYWnQnEk2weTcyMy1X1faR3vyYvUzDiA,56406
@@ -40,7 +40,7 @@ seleniumbase/console_scripts/sb_print.py,sha256=yo641b_OdSE0GUauOyxk-QrNeIjYzbRY
40
40
  seleniumbase/console_scripts/sb_recorder.py,sha256=UQQhnAR18dbcC7ToDvj6TM2PIG5qBrNaekaM6kSK_E8,10970
41
41
  seleniumbase/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
42
42
  seleniumbase/core/application_manager.py,sha256=e_0sjtI8cjY5BNyZj1QBR0j6_oCScxGmSXYEpcYwuZE,576
43
- seleniumbase/core/browser_launcher.py,sha256=iARPYQoqT2qq4P6uVfyJL-cFwXmu0Cq0i6iK1PKuomA,182677
43
+ seleniumbase/core/browser_launcher.py,sha256=J-YrGmQg3teXszuaR8j08kzgnRBVyMwyRQkCnzgg2bA,187662
44
44
  seleniumbase/core/capabilities_parser.py,sha256=meIS2uHapTCq2ldfNAToC7r0cKmZDRXuYNKExM1GHDY,6038
45
45
  seleniumbase/core/colored_traceback.py,sha256=DrRWfg7XEnKcgY59Xj7Jdk09H-XqHYBSUpB-DiZt6iY,2020
46
46
  seleniumbase/core/create_db_tables.sql,sha256=VWPtrdiW_HQ6yETHjqTu-VIrTwvd8I8o1NfBeaVSHpU,972
@@ -70,7 +70,7 @@ seleniumbase/extensions/disable_csp.zip,sha256=YMifIIgEBiLrEFrS1sfW4Exh4br1V4oK1
70
70
  seleniumbase/extensions/recorder.zip,sha256=OOyzF-Ize2cSRu1CqhzSAq5vusI9hqLLd2OIApUHesI,11918
71
71
  seleniumbase/extensions/sbase_ext.zip,sha256=3s1N8zrVaMz8RQEOIoBzC3KDjtmHwVZRvVsX25Odr_s,8175
72
72
  seleniumbase/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
73
- seleniumbase/fixtures/base_case.py,sha256=le9PvYxZzLnGPo-8CcF-RIeCQPv0LeuJGCEV5OIs63Q,701104
73
+ seleniumbase/fixtures/base_case.py,sha256=oaWxRanC4KVZGrZ-DjrpFTCsBL3PENVWm5kl8_9JDx0,701361
74
74
  seleniumbase/fixtures/constants.py,sha256=TapuGLdERtvZPGMblVXkNGybr8tj8FMtN3sbJ3ygyoc,13569
75
75
  seleniumbase/fixtures/css_to_xpath.py,sha256=9ouDB1xl4MJ2os6JOgTIAyHKOQfuxtxvXC3O5hSnEKA,1954
76
76
  seleniumbase/fixtures/errors.py,sha256=KyxuEVx_e3MPhVrJfNIa_3ltMpbCFxfy_jxK8RFNTns,555
@@ -137,9 +137,9 @@ seleniumbase/utilities/selenium_grid/start-grid-hub.sh,sha256=KADv0RUHONLL2_I443
137
137
  seleniumbase/utilities/selenium_ide/ReadMe.md,sha256=hznGeuMpkIimqMiZBW-4goIy2ltW4l8X9kb0YSPUQfE,4483
138
138
  seleniumbase/utilities/selenium_ide/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
139
139
  seleniumbase/utilities/selenium_ide/convert_ide.py,sha256=pZFnqEJQEKZPyNFjkLD29s2HPQgCrWW9XJWpCPhWOoM,31691
140
- seleniumbase-4.28.4.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
141
- seleniumbase-4.28.4.dist-info/METADATA,sha256=g7wyUzKeBoxVbKkiXW0sh8l_1ldNXCsbiIjs3hpX-lY,85546
142
- seleniumbase-4.28.4.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
143
- seleniumbase-4.28.4.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
- seleniumbase-4.28.4.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
- seleniumbase-4.28.4.dist-info/RECORD,,
140
+ seleniumbase-4.28.5.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
141
+ seleniumbase-4.28.5.dist-info/METADATA,sha256=ZuuvKLP50pY2HsIkp70zhjApZYUe2FY_z9SefBEAF_8,85546
142
+ seleniumbase-4.28.5.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
143
+ seleniumbase-4.28.5.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
+ seleniumbase-4.28.5.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
+ seleniumbase-4.28.5.dist-info/RECORD,,