seleniumbase 4.30.0__py3-none-any.whl → 4.30.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.
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.30.0"
2
+ __version__ = "4.30.2"
@@ -350,9 +350,10 @@ sbase mkfile new_test.py
350
350
 
351
351
  * Options:
352
352
 
353
+ ``--uc`` (UC Mode boilerplate using SB context manager)
353
354
  `-b` / `--basic` (Basic boilerplate / single-line test)
354
- `-r` / `--rec` (adds Pdb+ breakpoint for Recorder Mode)
355
- ``--url=URL`` (makes the test start on a specific page)
355
+ `-r` / `--rec` (Adds Pdb+ breakpoint for Recorder Mode)
356
+ ``--url=URL`` (Makes the test start on a specific page)
356
357
 
357
358
  * Language Options:
358
359
 
@@ -381,6 +382,7 @@ methods: "open", "type", "click", "assert_element",
381
382
  and "assert_text". If using the basic boilerplate
382
383
  option, only the "open" method is included. Only the
383
384
  BaseCase format supports Languages or Recorder Mode.
385
+ UC Mode automatically uses English with SB() format.
384
386
 
385
387
  <h3>mkrec / record / codegen</h3>
386
388
 
@@ -264,9 +264,10 @@ def show_mkfile_usage():
264
264
  print(" Example:")
265
265
  print(" sbase mkfile new_test.py")
266
266
  print(" Options:")
267
+ print(" --uc (UC Mode boilerplate using SB context manager)")
267
268
  print(" -b / --basic (Basic boilerplate / single-line test)")
268
- print(" -r / --rec (adds Pdb+ breakpoint for Recorder Mode)")
269
- print(" --url=URL (makes the test start on a specific page)")
269
+ print(" -r / --rec (Adds Pdb+ breakpoint for Recorder Mode)")
270
+ print(" --url=URL (Makes the test start on a specific page)")
270
271
  print(" Language Options:")
271
272
  print(" --en / --English | --zh / --Chinese")
272
273
  print(" --nl / --Dutch | --fr / --French")
@@ -289,6 +290,7 @@ def show_mkfile_usage():
289
290
  print(' and "assert_text". If using the basic boilerplate')
290
291
  print(' option, only the "open" method is included. Only the')
291
292
  print(" BaseCase format supports Languages or Recorder Mode.")
293
+ print(" UC Mode automatically uses English with SB() format.")
292
294
  print("")
293
295
 
294
296
 
@@ -9,9 +9,10 @@ Example:
9
9
  sbase mkfile new_test.py
10
10
 
11
11
  Options:
12
+ --uc (UC Mode boilerplate using SB context manager)
12
13
  -b / --basic (Basic boilerplate / single-line test)
13
- -r / --rec (adds Pdb+ breakpoint for Recorder Mode)
14
- --url=URL (makes the test start on a specific page)
14
+ -r / --rec (Adds Pdb+ breakpoint for Recorder Mode)
15
+ --url=URL (Makes the test start on a specific page)
15
16
 
16
17
  Language Options:
17
18
  --en / --English | --zh / --Chinese
@@ -37,6 +38,7 @@ Output:
37
38
  and "assert_text". If using the basic boilerplate
38
39
  option, only the "open" method is included. Only the
39
40
  BaseCase format supports Languages or Recorder Mode.
41
+ UC Mode automatically uses English with SB() format.
40
42
  """
41
43
  import codecs
42
44
  import colorama
@@ -52,9 +54,10 @@ def invalid_run_command(msg=None):
52
54
  exp += " Example:\n"
53
55
  exp += " sbase mkfile new_test.py\n"
54
56
  exp += " Options:\n"
57
+ exp += " --uc (UC Mode boilerplate using SB context manager)\n"
55
58
  exp += " -b / --basic (Basic boilerplate / single-line test)\n"
56
- exp += " -r / --rec (adds Pdb+ breakpoint for Recorder Mode)\n"
57
- exp += " --url=URL (makes the test start on a specific page)\n"
59
+ exp += " -r / --rec (Adds Pdb+ breakpoint for Recorder Mode)\n"
60
+ exp += " --url=URL (Makes the test start on a specific page)\n"
58
61
  exp += " Language Options:\n"
59
62
  exp += " --en / --English | --zh / --Chinese\n"
60
63
  exp += " --nl / --Dutch | --fr / --French\n"
@@ -77,6 +80,7 @@ def invalid_run_command(msg=None):
77
80
  exp += ' and "assert_text". If using the basic boilerplate\n'
78
81
  exp += ' option, only the "open" method is included. Only the\n'
79
82
  exp += " BaseCase format supports Languages or Recorder Mode.\n"
83
+ exp += " UC Mode automatically uses English with SB() format.\n"
80
84
  if not msg:
81
85
  raise Exception("INVALID RUN COMMAND!\n\n%s" % exp)
82
86
  elif msg == "help":
@@ -105,6 +109,7 @@ def main():
105
109
  cr = colorama.Style.RESET_ALL
106
110
 
107
111
  basic = False
112
+ use_uc = False
108
113
  help_me = False
109
114
  recorder = False
110
115
  error_msg = None
@@ -152,6 +157,9 @@ def main():
152
157
  recorder = True
153
158
  elif option == "--record" or option == "--recorder":
154
159
  recorder = True
160
+ elif use_uc:
161
+ # UC must use English & ContextManager formats
162
+ continue
155
163
  elif option == "--en" or option == "--english":
156
164
  language = "English"
157
165
  elif option == "--zh" or option == "--chinese":
@@ -184,6 +192,11 @@ def main():
184
192
  syntax = "DriverContext"
185
193
  elif option == "--dm" or option == "--driver-manager":
186
194
  syntax = "DriverManager"
195
+ elif option == "--uc":
196
+ basic = True
197
+ language = "English"
198
+ syntax = "ContextManager"
199
+ use_uc = True
187
200
  else:
188
201
  invalid_cmd = "\n===> INVALID OPTION: >> %s <<\n" % option
189
202
  invalid_cmd = invalid_cmd.replace(">> ", ">>" + c5 + " ")
@@ -319,16 +332,22 @@ def main():
319
332
  data = []
320
333
  data.append("from seleniumbase import SB")
321
334
  data.append("")
322
- data.append('with SB(browser="chrome") as sb:')
323
- data.append(
324
- ' sb.open("data:text/html,<div>Hello<br><input></div>")'
325
- )
335
+ if use_uc:
336
+ data.append('with SB(uc=True) as sb:')
337
+ else:
338
+ data.append('with SB(browser="chrome") as sb:')
339
+ if use_uc:
340
+ data.append(' url = "%s"' % url)
341
+ data.append(" sb.uc_open_with_reconnect(url, 4)")
342
+ data.append(" sb.uc_gui_click_captcha()")
343
+ else:
344
+ data.append(' sb.open("%s")' % url)
326
345
  if not basic:
327
346
  data.append(' sb.type("input", "Goodbye") # selector, text')
328
- data.append(' sb.click("html body > div") # selector')
347
+ data.append(' sb.click("html body > p") # selector')
329
348
  data.append(' sb.assert_element("input") # selector')
330
- data.append(' sb.assert_text("Hello", "div") # text, selector')
331
- data.append(' sb.highlight("div") # selector')
349
+ data.append(' sb.assert_text("Hello", "p") # text, selector')
350
+ data.append(' sb.highlight("p") # selector')
332
351
  data.append(" sb.sleep(0.5) # seconds")
333
352
  data.append("")
334
353
  new_data = data
@@ -337,7 +356,14 @@ def main():
337
356
  data.append("from seleniumbase import DriverContext")
338
357
  data.append("")
339
358
  data.append('with DriverContext(browser="chrome") as driver:')
340
- data.append(' driver.get("data:text/html,<p>Hello<br><input>")')
359
+ data.append(' driver.get("%s")' % url)
360
+ if not basic:
361
+ data.append(' driver.type("input", "Goodbye") # sel, text')
362
+ data.append(' driver.click("html body > p") # selector')
363
+ data.append(' driver.assert_element("input") # selector')
364
+ data.append(' driver.assert_text("Hello", "p") # text, sel')
365
+ data.append(' driver.highlight("p") # selector')
366
+ data.append(" driver.sleep(0.5) # seconds")
341
367
  data.append("")
342
368
  new_data = data
343
369
  elif language == "English" and syntax == "DriverManager":
@@ -346,7 +372,14 @@ def main():
346
372
  data.append("")
347
373
  data.append('driver = Driver(browser="chrome")')
348
374
  data.append("try:")
349
- data.append(' driver.get("data:text/html,<p>Hello<br><input>")')
375
+ data.append(' driver.get("%s")' % url)
376
+ if not basic:
377
+ data.append(' driver.type("input", "Goodbye") # sel, text')
378
+ data.append(' driver.click("html body > p") # selector')
379
+ data.append(' driver.assert_element("input") # selector')
380
+ data.append(' driver.assert_text("Hello", "p") # text, sel')
381
+ data.append(' driver.highlight("p") # selector')
382
+ data.append(" driver.sleep(0.5) # seconds")
350
383
  data.append("finally:")
351
384
  data.append(" driver.quit()")
352
385
  data.append("")
@@ -340,17 +340,19 @@ def find_edgedriver_version_to_use(use_version, driver_version):
340
340
  return use_version
341
341
 
342
342
 
343
- def has_cf(text):
343
+ def has_captcha(text):
344
344
  if (
345
345
  "<title>403 Forbidden</title>" in text
346
346
  or "Permission Denied</title>" in text
347
347
  or 'id="challenge-error-text"' in text
348
348
  or "<title>Just a moment..." in text
349
349
  or 'action="/?__cf_chl_f_tk' in text
350
+ or 'id="challenge-widget-' in text
350
351
  or 'src="chromedriver.js"' in text
351
352
  or 'class="g-recaptcha"' in text
352
353
  or 'content="Pixelscan"' in text
353
354
  or 'id="challenge-form"' in text
355
+ or "/challenge-platform" in text
354
356
  or "window._cf_chl_opt" in text
355
357
  or "/recaptcha/api.js" in text
356
358
  or "/turnstile/" in text
@@ -377,7 +379,7 @@ def uc_special_open_if_cf(
377
379
  status_str.startswith("3")
378
380
  or status_str.startswith("4")
379
381
  or status_str.startswith("5")
380
- or has_cf(req_get.text)
382
+ or has_captcha(req_get.text)
381
383
  ):
382
384
  special = True
383
385
  if status_str == "403" or status_str == "429":
@@ -763,6 +765,8 @@ def _on_a_cf_turnstile_page(driver):
763
765
  source = driver.get_page_source()
764
766
  if (
765
767
  'data-callback="onCaptchaSuccess"' in source
768
+ or "/challenge-platform/scripts/" in source
769
+ or 'id="challenge-widget-' in source
766
770
  or "cf-turnstile-" in source
767
771
  ):
768
772
  return True
@@ -863,9 +867,16 @@ def _uc_gui_click_captcha(
863
867
  frame = "%s div[style]" % frame
864
868
  elif (
865
869
  driver.is_element_present('[name*="cf-turnstile-"]')
866
- and driver.is_element_present("div.spacer div[style]")
870
+ and driver.is_element_present("div.spacer div")
867
871
  ):
868
- frame = "div.spacer div[style]"
872
+ frame = "div.spacer div"
873
+ elif (
874
+ driver.is_element_present('script[src*="challenges.c"]')
875
+ and driver.is_element_present(
876
+ '[data-testid*="challenge-"] div'
877
+ )
878
+ ):
879
+ frame = '[data-testid*="challenge-"] div'
869
880
  elif (
870
881
  (
871
882
  driver.is_element_present('[name*="cf-turnstile-"]')
@@ -883,6 +894,14 @@ def _uc_gui_click_captcha(
883
894
  )
884
895
  ):
885
896
  frame = "%s .cf-turnstile-wrapper" % frame
897
+ elif (
898
+ frame != "iframe"
899
+ and driver.is_element_present(
900
+ '%s [name*="cf-turnstile"]' % frame
901
+ )
902
+ and driver.is_element_present("%s div" % frame)
903
+ ):
904
+ frame = "%s div" % frame
886
905
  elif driver.is_element_present(".cf-turnstile-wrapper"):
887
906
  frame = ".cf-turnstile-wrapper"
888
907
  elif driver.is_element_present(
@@ -1099,9 +1118,16 @@ def _uc_gui_handle_captcha(
1099
1118
  frame = '[data-callback="onCaptchaSuccess"]'
1100
1119
  elif (
1101
1120
  driver.is_element_present('[name*="cf-turnstile-"]')
1102
- and driver.is_element_present("div.spacer div[style]")
1121
+ and driver.is_element_present("div.spacer div")
1122
+ ):
1123
+ frame = "div.spacer div"
1124
+ elif (
1125
+ driver.is_element_present('script[src*="challenges.c"]')
1126
+ and driver.is_element_present(
1127
+ '[data-testid*="challenge-"] div'
1128
+ )
1103
1129
  ):
1104
- frame = "div.spacer div[style]"
1130
+ frame = '[data-testid*="challenge-"] div'
1105
1131
  elif (
1106
1132
  (
1107
1133
  driver.is_element_present('[name*="cf-turnstile-"]')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: seleniumbase
3
- Version: 4.30.0
3
+ Version: 4.30.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
@@ -59,7 +59,7 @@ Requires-Python: >=3.7
59
59
  Description-Content-Type: text/markdown
60
60
  License-File: LICENSE
61
61
  Requires-Dist: attrs >=24.2.0
62
- Requires-Dist: certifi >=2024.7.4
62
+ Requires-Dist: certifi >=2024.8.30
63
63
  Requires-Dist: exceptiongroup >=1.2.2
64
64
  Requires-Dist: parse >=1.20.2
65
65
  Requires-Dist: parse-type >=0.6.3
@@ -161,7 +161,7 @@ Requires-Dist: cffi ==1.15.1 ; (python_version < "3.8") and extra == 'pdfminer'
161
161
  Requires-Dist: cryptography ==39.0.2 ; (python_version < "3.9") and extra == 'pdfminer'
162
162
  Requires-Dist: pdfminer.six ==20240706 ; (python_version >= "3.8") and extra == 'pdfminer'
163
163
  Requires-Dist: cffi ==1.17.0 ; (python_version >= "3.8") and extra == 'pdfminer'
164
- Requires-Dist: cryptography ==43.0.0 ; (python_version >= "3.9") and extra == 'pdfminer'
164
+ Requires-Dist: cryptography ==43.0.1 ; (python_version >= "3.9") and extra == 'pdfminer'
165
165
  Provides-Extra: pillow
166
166
  Requires-Dist: Pillow ==9.5.0 ; (python_version < "3.8") and extra == 'pillow'
167
167
  Requires-Dist: Pillow >=10.4.0 ; (python_version >= "3.8") and extra == 'pillow'
@@ -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=2LQZxA2MHN0gDWi7lH0LnKGsK_Dk0DOG8QJwGK7SeMk,46
8
+ seleniumbase/__version__.py,sha256=BdkAfSbnD0GdQ2ws-16m3-ETEGErOpRmMIK6vKT_YUs,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
@@ -21,18 +21,18 @@ seleniumbase/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSu
21
21
  seleniumbase/config/ad_block_list.py,sha256=qCQvbpONdSXk6q5tMwLuOswGYE1Syd8cy5TMIYFjTME,3380
22
22
  seleniumbase/config/proxy_list.py,sha256=tSdk82_6pPqClotHMl3YOTlxi9IIEppHmCoQDkZXLqw,1123
23
23
  seleniumbase/config/settings.py,sha256=n07U3PrrTgXgg5S1DIGnRuR6Y7AW11y06lvkflD7ZuE,7708
24
- seleniumbase/console_scripts/ReadMe.md,sha256=WQiuXXpsyoKePkkt3aq7XMWr7KBZq7Wk4n2iee-2Ihk,20210
24
+ seleniumbase/console_scripts/ReadMe.md,sha256=t2AWWINwkPgnx8HUM3vQRtdFRwBS2XLGxYnmTipeheE,20320
25
25
  seleniumbase/console_scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  seleniumbase/console_scripts/logo_helper.py,sha256=F8pcANlWY6pdcMwHUdjjpjAD9i8XD0R5J-28eSh7QMM,1907
27
27
  seleniumbase/console_scripts/rich_helper.py,sha256=U_zvXpalxVV8rtg8c8EnNNmnh45tii3AV5ZV3O3KbGA,2234
28
- seleniumbase/console_scripts/run.py,sha256=54XCmUvOtYT5UmajEZ208wflH5BLkEpHZSmvgaJFSN0,59173
28
+ seleniumbase/console_scripts/run.py,sha256=H7sWc5Bni_RTk4rWqiLZ6b1lhHnKjfVZjy1xYehl2YE,59327
29
29
  seleniumbase/console_scripts/sb_behave_gui.py,sha256=8uFTnHU3lPsxAlPFbGe4tH4fVryEbQeVBydwJZw3e9c,15403
30
30
  seleniumbase/console_scripts/sb_caseplans.py,sha256=HrML5SU6E_3gC8Ae5byo5tnBidrs0sY3feJ8ug4cR4o,18415
31
31
  seleniumbase/console_scripts/sb_commander.py,sha256=FdRLcEe3xOnnbU1bZI4_1ZLu5eKdR4JuIh37j5M-J00,13585
32
32
  seleniumbase/console_scripts/sb_install.py,sha256=SZlJyN51SzQVR7WKquJtukOo3_h2mK00UMTkb0HEciQ,45682
33
33
  seleniumbase/console_scripts/sb_mkchart.py,sha256=QDDjA8N_Qy62Mgbe2fnSU8mhZbKTVyV9KJRKYz2Tf7Y,11232
34
34
  seleniumbase/console_scripts/sb_mkdir.py,sha256=-OJrGM3upjdhCQb00zxSapS7eVtE49K3bR6KzsGvBbM,30049
35
- seleniumbase/console_scripts/sb_mkfile.py,sha256=t2rxTZTz76RDeSbBdHLaHUDS6LT_p0ttm2H_uYdtBko,16480
35
+ seleniumbase/console_scripts/sb_mkfile.py,sha256=mZCUl318UkLvW5v1C40Tx19q6_aVJOfTZoKfd3XcakU,18132
36
36
  seleniumbase/console_scripts/sb_mkpres.py,sha256=5MEYFKATmh68wy0SRi2NQtO71MN7m-rQq-WtUp4cKD8,11306
37
37
  seleniumbase/console_scripts/sb_mkrec.py,sha256=AKAbVnkI5nLDpA6W9JZu38QSpJz5IE8Pto-Em9U5r2o,11208
38
38
  seleniumbase/console_scripts/sb_objectify.py,sha256=SRYY_cZ-Ip6Lj65T2maXRyJctOWAFhGSc-Xlc-u-2CM,122140
@@ -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=_Oms_vw4OHofMFyXxKDDX_PD1sdabHGdIrebGHUoC9s,197939
43
+ seleniumbase/core/browser_launcher.py,sha256=S5caztJN0Al8eRFbsTAKQIugD8PpCQnMhvQIqqpO1j8,199052
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
@@ -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.30.0.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
141
- seleniumbase-4.30.0.dist-info/METADATA,sha256=hsLLWlsN-hlsjf54EJrA6B--5AULFyGjLblKoehSZ6Q,86174
142
- seleniumbase-4.30.0.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
143
- seleniumbase-4.30.0.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
- seleniumbase-4.30.0.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
- seleniumbase-4.30.0.dist-info/RECORD,,
140
+ seleniumbase-4.30.2.dist-info/LICENSE,sha256=odSYtWibXBnQ1gBg6CnDZ82n8kLF_if5-2nbqnEyD8k,1085
141
+ seleniumbase-4.30.2.dist-info/METADATA,sha256=Zj_V_pSG-9cEhphk9j0wA0vP40xi-Fol8V40UMyTV0M,86175
142
+ seleniumbase-4.30.2.dist-info/WHEEL,sha256=uCRv0ZEik_232NlR4YDw4Pv3Ajt5bKvMH13NUU7hFuI,91
143
+ seleniumbase-4.30.2.dist-info/entry_points.txt,sha256=CNrh2EKNaHYEhO6pP1RJyVLB99LkDDYX7TnUK8xfjqk,623
144
+ seleniumbase-4.30.2.dist-info/top_level.txt,sha256=4N97aBOQ8ETCnDnokBsWb07lJfTaq3C1ZzYRxvLMxqU,19
145
+ seleniumbase-4.30.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (74.1.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5