seleniumbase 4.42.5__tar.gz → 4.42.6__tar.gz

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.

Potentially problematic release.


This version of seleniumbase might be problematic. Click here for more details.

Files changed (157) hide show
  1. {seleniumbase-4.42.5/seleniumbase.egg-info → seleniumbase-4.42.6}/PKG-INFO +9 -7
  2. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/README.md +2 -2
  3. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/requirements.txt +4 -3
  4. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/browser_launcher.py +6 -8
  6. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/sb_cdp.py +24 -8
  7. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/base_case.py +6 -10
  8. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/shared_utils.py +20 -1
  9. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/cdp_util.py +14 -7
  10. {seleniumbase-4.42.5 → seleniumbase-4.42.6/seleniumbase.egg-info}/PKG-INFO +9 -7
  11. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase.egg-info/requires.txt +12 -4
  12. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/setup.py +6 -4
  13. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/.gitignore +0 -0
  14. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/LICENSE +0 -0
  15. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/MANIFEST.in +0 -0
  16. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/install.sh +0 -0
  17. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/pyproject.toml +0 -0
  18. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/pytest.ini +0 -0
  19. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/sbase/__init__.py +0 -0
  20. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/sbase/__main__.py +0 -0
  21. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/sbase/steps.py +0 -0
  22. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/__init__.py +0 -0
  23. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/__main__.py +0 -0
  24. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/behave/__init__.py +0 -0
  25. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/behave/behave_helper.py +0 -0
  26. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/behave/behave_sb.py +0 -0
  27. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/behave/steps.py +0 -0
  28. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/common/__init__.py +0 -0
  29. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/common/decorators.py +0 -0
  30. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/common/encryption.py +0 -0
  31. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/common/exceptions.py +0 -0
  32. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/common/obfuscate.py +0 -0
  33. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/common/unobfuscate.py +0 -0
  34. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/config/__init__.py +0 -0
  35. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/config/ad_block_list.py +0 -0
  36. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/config/proxy_list.py +0 -0
  37. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/config/settings.py +0 -0
  38. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/__init__.py +0 -0
  39. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/logo_helper.py +0 -0
  40. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/rich_helper.py +0 -0
  41. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/run.py +0 -0
  42. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  43. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  44. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_commander.py +0 -0
  45. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_install.py +0 -0
  46. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  47. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  48. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  49. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  50. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  51. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  52. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_print.py +0 -0
  53. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  54. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/__init__.py +0 -0
  55. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/application_manager.py +0 -0
  56. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/capabilities_parser.py +0 -0
  57. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/colored_traceback.py +0 -0
  58. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/create_db_tables.sql +0 -0
  59. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/detect_b_ver.py +0 -0
  60. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/download_helper.py +0 -0
  61. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/encoded_images.py +0 -0
  62. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/jqc_helper.py +0 -0
  63. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/log_helper.py +0 -0
  64. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/mysql.py +0 -0
  65. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/proxy_helper.py +0 -0
  66. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/recorder_helper.py +0 -0
  67. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/report_helper.py +0 -0
  68. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/s3_manager.py +0 -0
  69. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/sb_driver.py +0 -0
  70. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/session_helper.py +0 -0
  71. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/settings_parser.py +0 -0
  72. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/style_sheet.py +0 -0
  73. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/testcase_manager.py +0 -0
  74. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/tour_helper.py +0 -0
  75. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/core/visual_helper.py +0 -0
  76. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/drivers/__init__.py +0 -0
  77. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  78. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  79. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/extensions/__init__.py +0 -0
  80. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/extensions/ad_block.zip +0 -0
  81. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/extensions/disable_csp.zip +0 -0
  82. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/extensions/recorder.zip +0 -0
  83. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/extensions/sbase_ext.zip +0 -0
  84. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/__init__.py +0 -0
  85. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/constants.py +0 -0
  86. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  87. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/errors.py +0 -0
  88. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/js_utils.py +0 -0
  89. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/page_actions.py +0 -0
  90. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/page_utils.py +0 -0
  91. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/unittest_helper.py +0 -0
  92. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/words.py +0 -0
  93. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  94. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/js_code/__init__.py +0 -0
  95. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/js_code/active_css_js.py +0 -0
  96. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/js_code/live_js.py +0 -0
  97. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/js_code/recorder_js.py +0 -0
  98. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/masterqa/__init__.py +0 -0
  99. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/masterqa/master_qa.py +0 -0
  100. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/__init__.py +0 -0
  101. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/base_plugin.py +0 -0
  102. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/basic_test_info.py +0 -0
  103. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  104. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/driver_manager.py +0 -0
  105. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/page_source.py +0 -0
  106. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/pytest_plugin.py +0 -0
  107. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  108. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/sb_manager.py +0 -0
  109. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/screen_shots.py +0 -0
  110. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/plugins/selenium_plugin.py +0 -0
  111. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/resources/__init__.py +0 -0
  112. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/__init__.py +0 -0
  113. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/chinese.py +0 -0
  114. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/dutch.py +0 -0
  115. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/french.py +0 -0
  116. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/italian.py +0 -0
  117. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/japanese.py +0 -0
  118. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/korean.py +0 -0
  119. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/master_dict.py +0 -0
  120. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/portuguese.py +0 -0
  121. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/russian.py +0 -0
  122. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/spanish.py +0 -0
  123. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/translate/translator.py +0 -0
  124. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/__init__.py +0 -0
  125. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp.py +0 -0
  126. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  127. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  128. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  129. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  130. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  131. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  132. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  133. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/dprocess.py +0 -0
  134. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/options.py +0 -0
  135. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/patcher.py +0 -0
  136. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/reactor.py +0 -0
  137. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/undetected/webelement.py +0 -0
  138. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/__init__.py +0 -0
  139. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  140. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  141. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  142. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  143. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  144. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  145. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  146. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  147. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  148. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  149. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  150. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  151. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  152. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase.egg-info/SOURCES.txt +0 -0
  153. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase.egg-info/dependency_links.txt +0 -0
  154. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase.egg-info/entry_points.txt +0 -0
  155. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/seleniumbase.egg-info/top_level.txt +0 -0
  156. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/setup.cfg +0 -0
  157. {seleniumbase-4.42.5 → seleniumbase-4.42.6}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.42.5
3
+ Version: 4.42.6
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
@@ -95,9 +95,9 @@ Requires-Dist: pygments>=2.19.2
95
95
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
96
96
  Requires-Dist: tabcompleter>=1.4.0
97
97
  Requires-Dist: pdbp>=1.7.1
98
- Requires-Dist: idna==3.10
98
+ Requires-Dist: idna>=3.11
99
99
  Requires-Dist: chardet==5.2.0
100
- Requires-Dist: charset-normalizer<4,>=3.4.3
100
+ Requires-Dist: charset-normalizer<4,>=3.4.4
101
101
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
102
102
  Requires-Dist: urllib3<2.6.0,>=1.26.20; python_version >= "3.10"
103
103
  Requires-Dist: requests==2.32.4; python_version < "3.9"
@@ -149,7 +149,8 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
149
149
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
150
150
  Provides-Extra: coverage
151
151
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
152
- Requires-Dist: coverage>=7.10.7; python_version >= "3.9" and extra == "coverage"
152
+ Requires-Dist: coverage>=7.10.7; (python_version >= "3.9" and python_version < "3.10") and extra == "coverage"
153
+ Requires-Dist: coverage>=7.11.0; python_version >= "3.10" and extra == "coverage"
153
154
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
154
155
  Requires-Dist: pytest-cov>=7.0.0; python_version >= "3.9" and extra == "coverage"
155
156
  Provides-Extra: flake8
@@ -177,7 +178,8 @@ Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
177
178
  Requires-Dist: pycparser==2.23; python_version >= "3.9" and extra == "pdfminer"
178
179
  Provides-Extra: pillow
179
180
  Requires-Dist: Pillow>=10.4.0; python_version < "3.9" and extra == "pillow"
180
- Requires-Dist: Pillow>=11.3.0; python_version >= "3.9" and extra == "pillow"
181
+ Requires-Dist: Pillow>=11.3.0; (python_version >= "3.9" and python_version < "3.10") and extra == "pillow"
182
+ Requires-Dist: Pillow>=12.0.0; python_version >= "3.10" and extra == "pillow"
181
183
  Provides-Extra: pip-system-certs
182
184
  Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra == "pip-system-certs"
183
185
  Provides-Extra: proxy
@@ -269,13 +271,13 @@ Dynamic: summary
269
271
  <br />
270
272
  </p>
271
273
 
272
- <p>SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.</p>
274
+ <p>SeleniumBase is used for automating browsers, testing websites, scraping data, and bypassing CAPTCHAs.</p>
273
275
 
274
276
  --------
275
277
 
276
278
  📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/** folder](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
277
279
 
278
- 🐙 Note that <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> (Stealth Mode) have their own ReadMe files.
280
+ 🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> help you evade bot-detection.
279
281
 
280
282
  ℹ️ Most scripts run with raw <code translate="no"><b>python</b></code>, although some scripts use <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a> that expect <a href="https://docs.pytest.org/en/latest/how-to/usage.html" translate="no"><b>pytest</b></a> (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
281
283
 
@@ -53,13 +53,13 @@
53
53
  <br />
54
54
  </p>
55
55
 
56
- <p>SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.</p>
56
+ <p>SeleniumBase is used for automating browsers, testing websites, scraping data, and bypassing CAPTCHAs.</p>
57
57
 
58
58
  --------
59
59
 
60
60
  📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/** folder](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
61
61
 
62
- 🐙 Note that <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> (Stealth Mode) have their own ReadMe files.
62
+ 🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> help you evade bot-detection.
63
63
 
64
64
  ℹ️ Most scripts run with raw <code translate="no"><b>python</b></code>, although some scripts use <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a> that expect <a href="https://docs.pytest.org/en/latest/how-to/usage.html" translate="no"><b>pytest</b></a> (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
65
65
 
@@ -34,9 +34,9 @@ pygments>=2.19.2
34
34
  pyreadline3>=3.5.4;platform_system=="Windows"
35
35
  tabcompleter>=1.4.0
36
36
  pdbp>=1.7.1
37
- idna==3.10
37
+ idna>=3.11
38
38
  chardet==5.2.0
39
- charset-normalizer>=3.4.3,<4
39
+ charset-normalizer>=3.4.4,<4
40
40
  urllib3>=1.26.20,<2;python_version<"3.10"
41
41
  urllib3>=1.26.20,<2.6.0;python_version>="3.10"
42
42
  requests==2.32.4;python_version<"3.9"
@@ -87,7 +87,8 @@ rich>=14.2.0,<15
87
87
  # ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
88
88
 
89
89
  coverage>=7.6.1;python_version<"3.9"
90
- coverage>=7.10.7;python_version>="3.9"
90
+ coverage>=7.10.7;python_version>="3.9" and python_version<"3.10"
91
+ coverage>=7.11.0;python_version>="3.10"
91
92
  pytest-cov>=5.0.0;python_version<"3.9"
92
93
  pytest-cov>=7.0.0;python_version>="3.9"
93
94
  flake8==5.0.4;python_version<"3.9"
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.42.5"
2
+ __version__ = "4.42.6"
@@ -985,17 +985,15 @@ def __install_pyautogui_if_missing():
985
985
  import pyautogui
986
986
  with suppress(Exception):
987
987
  use_pyautogui_ver = constants.PyAutoGUI.VER
988
- if pyautogui.__version__ != use_pyautogui_ver:
989
- del pyautogui
990
- shared_utils.pip_install(
991
- "pyautogui", version=use_pyautogui_ver
992
- )
988
+ u_pv = shared_utils.make_version_tuple(use_pyautogui_ver)
989
+ pv = shared_utils.make_version_tuple(pyautogui.__version__)
990
+ if pv < u_pv:
991
+ del pyautogui # To get newer ver
992
+ shared_utils.pip_install("pyautogui", version="Latest")
993
993
  import pyautogui
994
994
  except Exception:
995
995
  print("\nPyAutoGUI required! Installing now...")
996
- shared_utils.pip_install(
997
- "pyautogui", version=constants.PyAutoGUI.VER
998
- )
996
+ shared_utils.pip_install("pyautogui", version="Latest")
999
997
  try:
1000
998
  import pyautogui
1001
999
  except Exception:
@@ -912,6 +912,12 @@ class CDPMethods():
912
912
  element.scroll_into_view()
913
913
  if text.endswith("\n") or text.endswith("\r"):
914
914
  text = text[:-1] + "\r\n"
915
+ elif (
916
+ element.tag_name == "textarea"
917
+ and "\n" in text
918
+ and "\r" not in text
919
+ ):
920
+ text = text.replace("\n", "\r")
915
921
  element.send_keys(text)
916
922
  self.__slow_mode_pause_if_set()
917
923
  self.loop.run_until_complete(self.page.sleep(0.025))
@@ -927,6 +933,12 @@ class CDPMethods():
927
933
  if text.endswith("\n") or text.endswith("\r"):
928
934
  submit = True
929
935
  text = text[:-1]
936
+ elif (
937
+ element.tag_name == "textarea"
938
+ and "\n" in text
939
+ and "\r" not in text
940
+ ):
941
+ text = text.replace("\n", "\r")
930
942
  for key in text:
931
943
  element.send_keys(key)
932
944
  time.sleep(0.044)
@@ -947,6 +959,12 @@ class CDPMethods():
947
959
  element.clear_input()
948
960
  if text.endswith("\n") or text.endswith("\r"):
949
961
  text = text[:-1] + "\r\n"
962
+ elif (
963
+ element.tag_name == "textarea"
964
+ and "\n" in text
965
+ and "\r" not in text
966
+ ):
967
+ text = text.replace("\n", "\r")
950
968
  element.send_keys(text)
951
969
  self.__slow_mode_pause_if_set()
952
970
  self.loop.run_until_complete(self.page.sleep(0.025))
@@ -1555,17 +1573,15 @@ class CDPMethods():
1555
1573
  import pyautogui
1556
1574
  with suppress(Exception):
1557
1575
  use_pyautogui_ver = constants.PyAutoGUI.VER
1558
- if pyautogui.__version__ != use_pyautogui_ver:
1559
- del pyautogui
1560
- shared_utils.pip_install(
1561
- "pyautogui", version=use_pyautogui_ver
1562
- )
1576
+ u_pv = shared_utils.make_version_tuple(use_pyautogui_ver)
1577
+ pv = shared_utils.make_version_tuple(pyautogui.__version__)
1578
+ if pv < u_pv:
1579
+ del pyautogui # To get newer ver
1580
+ shared_utils.pip_install("pyautogui", version="Latest")
1563
1581
  import pyautogui
1564
1582
  except Exception:
1565
1583
  print("\nPyAutoGUI required! Installing now...")
1566
- shared_utils.pip_install(
1567
- "pyautogui", version=constants.PyAutoGUI.VER
1568
- )
1584
+ shared_utils.pip_install("pyautogui", version="Latest")
1569
1585
  try:
1570
1586
  import pyautogui
1571
1587
  except Exception:
@@ -114,9 +114,7 @@ class BaseCase(unittest.TestCase):
114
114
  self.driver = None
115
115
  self.environment = None
116
116
  self.env = None # Add a shortened version of self.environment
117
- self.version_list = [
118
- int(i) for i in __version__.split(".") if i.isdigit()
119
- ]
117
+ self.version_list = shared_utils.make_version_list(__version__)
120
118
  self.version_tuple = tuple(self.version_list)
121
119
  self.version_info = self.version_tuple
122
120
  self.time = time.time
@@ -14491,11 +14489,11 @@ class BaseCase(unittest.TestCase):
14491
14489
  import pyautogui
14492
14490
  with suppress(Exception):
14493
14491
  use_pyautogui_ver = constants.PyAutoGUI.VER
14494
- if pyautogui.__version__ != use_pyautogui_ver:
14492
+ u_pv = shared_utils.make_version_tuple(use_pyautogui_ver)
14493
+ pv = shared_utils.make_version_tuple(pyautogui.__version__)
14494
+ if pv < u_pv:
14495
14495
  del pyautogui # To get newer ver
14496
- shared_utils.pip_install(
14497
- "pyautogui", version=use_pyautogui_ver
14498
- )
14496
+ shared_utils.pip_install("pyautogui", version="Latest")
14499
14497
  import pyautogui
14500
14498
  pyautogui_is_installed = True
14501
14499
  except Exception:
@@ -14504,9 +14502,7 @@ class BaseCase(unittest.TestCase):
14504
14502
  "Installing now..."
14505
14503
  )
14506
14504
  print("\n" + message)
14507
- shared_utils.pip_install(
14508
- "pyautogui", version=constants.PyAutoGUI.VER
14509
- )
14505
+ shared_utils.pip_install("pyautogui", version="Latest")
14510
14506
  import pyautogui
14511
14507
  pyautogui_is_installed = True
14512
14508
  if (
@@ -18,16 +18,35 @@ def pip_install(package, version=None):
18
18
  pip_install_lock = fasteners.InterProcessLock(
19
19
  constants.PipInstall.LOCKFILE
20
20
  )
21
+ upgrade_to_latest = False
22
+ if (
23
+ version
24
+ and ("U" in str(version).upper() or "L" in str(version).upper())
25
+ ):
26
+ # Upgrade to Latest when specified with "U" or "L"
27
+ upgrade_to_latest = True
21
28
  with pip_install_lock:
22
29
  if not version:
23
30
  subprocess.check_call(
24
31
  [sys.executable, "-m", "pip", "install", package]
25
32
  )
26
- else:
33
+ elif not upgrade_to_latest:
27
34
  package_and_version = package + "==" + str(version)
28
35
  subprocess.check_call(
29
36
  [sys.executable, "-m", "pip", "install", package_and_version]
30
37
  )
38
+ else:
39
+ subprocess.check_call(
40
+ [sys.executable, "-m", "pip", "install", "-U", package]
41
+ )
42
+
43
+
44
+ def make_version_list(version_str):
45
+ return [int(i) for i in version_str.split(".") if i.isdigit()]
46
+
47
+
48
+ def make_version_tuple(version_str):
49
+ return tuple(make_version_list(version_str))
31
50
 
32
51
 
33
52
  def get_mfa_code(totp_key=None):
@@ -121,22 +121,26 @@ def __activate_virtual_display_as_needed(
121
121
  import pyautogui
122
122
  with suppress(Exception):
123
123
  use_pyautogui_ver = constants.PyAutoGUI.VER
124
- if pyautogui.__version__ != use_pyautogui_ver:
124
+ u_pv = shared_utils.make_version_tuple(
125
+ use_pyautogui_ver
126
+ )
127
+ pv = shared_utils.make_version_tuple(
128
+ pyautogui.__version__
129
+ )
130
+ if pv < u_pv:
125
131
  del pyautogui # To get newer ver
126
132
  shared_utils.pip_install(
127
- "pyautogui", version=use_pyautogui_ver
133
+ "pyautogui", version="Latest"
128
134
  )
129
135
  import pyautogui
130
136
  pyautogui_is_installed = True
131
137
  except Exception:
132
138
  message = (
133
- "PyAutoGUI is required for UC Mode on Linux! "
139
+ "PyAutoGUI is required for CDP Mode on Linux! "
134
140
  "Installing now..."
135
141
  )
136
142
  print("\n" + message)
137
- shared_utils.pip_install(
138
- "pyautogui", version=constants.PyAutoGUI.VER
139
- )
143
+ shared_utils.pip_install("pyautogui", version="Latest")
140
144
  import pyautogui
141
145
  pyautogui_is_installed = True
142
146
  if (
@@ -689,7 +693,10 @@ def start_sync(*args, **kwargs) -> Browser:
689
693
 
690
694
 
691
695
  async def create_from_driver(driver) -> Browser:
692
- """Create a Browser instance from a running driver instance."""
696
+ """Create a CDP Browser instance from a running UC driver.
697
+ This method is DEPRECATED in favor of activate_cdp_mode(),
698
+ which includes the option of switching between the modes,
699
+ and also properly handles configuration based on options."""
693
700
  from .config import Config
694
701
 
695
702
  conf = Config()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.42.5
3
+ Version: 4.42.6
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
@@ -95,9 +95,9 @@ Requires-Dist: pygments>=2.19.2
95
95
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
96
96
  Requires-Dist: tabcompleter>=1.4.0
97
97
  Requires-Dist: pdbp>=1.7.1
98
- Requires-Dist: idna==3.10
98
+ Requires-Dist: idna>=3.11
99
99
  Requires-Dist: chardet==5.2.0
100
- Requires-Dist: charset-normalizer<4,>=3.4.3
100
+ Requires-Dist: charset-normalizer<4,>=3.4.4
101
101
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
102
102
  Requires-Dist: urllib3<2.6.0,>=1.26.20; python_version >= "3.10"
103
103
  Requires-Dist: requests==2.32.4; python_version < "3.9"
@@ -149,7 +149,8 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
149
149
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
150
150
  Provides-Extra: coverage
151
151
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
152
- Requires-Dist: coverage>=7.10.7; python_version >= "3.9" and extra == "coverage"
152
+ Requires-Dist: coverage>=7.10.7; (python_version >= "3.9" and python_version < "3.10") and extra == "coverage"
153
+ Requires-Dist: coverage>=7.11.0; python_version >= "3.10" and extra == "coverage"
153
154
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
154
155
  Requires-Dist: pytest-cov>=7.0.0; python_version >= "3.9" and extra == "coverage"
155
156
  Provides-Extra: flake8
@@ -177,7 +178,8 @@ Requires-Dist: pycparser==2.22; python_version < "3.9" and extra == "pdfminer"
177
178
  Requires-Dist: pycparser==2.23; python_version >= "3.9" and extra == "pdfminer"
178
179
  Provides-Extra: pillow
179
180
  Requires-Dist: Pillow>=10.4.0; python_version < "3.9" and extra == "pillow"
180
- Requires-Dist: Pillow>=11.3.0; python_version >= "3.9" and extra == "pillow"
181
+ Requires-Dist: Pillow>=11.3.0; (python_version >= "3.9" and python_version < "3.10") and extra == "pillow"
182
+ Requires-Dist: Pillow>=12.0.0; python_version >= "3.10" and extra == "pillow"
181
183
  Provides-Extra: pip-system-certs
182
184
  Requires-Dist: pip-system-certs==4.0; platform_system == "Windows" and extra == "pip-system-certs"
183
185
  Provides-Extra: proxy
@@ -269,13 +271,13 @@ Dynamic: summary
269
271
  <br />
270
272
  </p>
271
273
 
272
- <p>SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.</p>
274
+ <p>SeleniumBase is used for automating browsers, testing websites, scraping data, and bypassing CAPTCHAs.</p>
273
275
 
274
276
  --------
275
277
 
276
278
  📚 Learn from [**over 200 examples** in the **SeleniumBase/examples/** folder](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
277
279
 
278
- 🐙 Note that <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> (Stealth Mode) have their own ReadMe files.
280
+ 🐙 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> and <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> help you evade bot-detection.
279
281
 
280
282
  ℹ️ Most scripts run with raw <code translate="no"><b>python</b></code>, although some scripts use <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a> that expect <a href="https://docs.pytest.org/en/latest/how-to/usage.html" translate="no"><b>pytest</b></a> (a Python unit-testing framework included with SeleniumBase that can discover, collect, and run tests automatically).
281
283
 
@@ -15,9 +15,9 @@ pyyaml>=6.0.3
15
15
  pygments>=2.19.2
16
16
  tabcompleter>=1.4.0
17
17
  pdbp>=1.7.1
18
- idna==3.10
18
+ idna>=3.11
19
19
  chardet==5.2.0
20
- charset-normalizer<4,>=3.4.3
20
+ charset-normalizer<4,>=3.4.4
21
21
  sniffio==1.3.1
22
22
  h11==0.16.0
23
23
  outcome==1.3.0.post0
@@ -108,10 +108,15 @@ allure-behave>=2.13.5
108
108
  coverage>=7.6.1
109
109
  pytest-cov>=5.0.0
110
110
 
111
+ [coverage:python_version >= "3.10"]
112
+ coverage>=7.11.0
113
+
111
114
  [coverage:python_version >= "3.9"]
112
- coverage>=7.10.7
113
115
  pytest-cov>=7.0.0
114
116
 
117
+ [coverage:python_version >= "3.9" and python_version < "3.10"]
118
+ coverage>=7.10.7
119
+
115
120
  [flake8]
116
121
  mccabe==0.7.0
117
122
 
@@ -156,7 +161,10 @@ pycparser==2.23
156
161
  [pillow:python_version < "3.9"]
157
162
  Pillow>=10.4.0
158
163
 
159
- [pillow:python_version >= "3.9"]
164
+ [pillow:python_version >= "3.10"]
165
+ Pillow>=12.0.0
166
+
167
+ [pillow:python_version >= "3.9" and python_version < "3.10"]
160
168
  Pillow>=11.3.0
161
169
 
162
170
  [pip-system-certs]
@@ -181,9 +181,9 @@ setup(
181
181
  'pyreadline3>=3.5.4;platform_system=="Windows"',
182
182
  "tabcompleter>=1.4.0",
183
183
  "pdbp>=1.7.1",
184
- "idna==3.10",
184
+ "idna>=3.11",
185
185
  'chardet==5.2.0',
186
- 'charset-normalizer>=3.4.3,<4',
186
+ 'charset-normalizer>=3.4.4,<4',
187
187
  'urllib3>=1.26.20,<2;python_version<"3.10"',
188
188
  'urllib3>=1.26.20,<2.6.0;python_version>="3.10"',
189
189
  'requests==2.32.4;python_version<"3.9"',
@@ -243,7 +243,8 @@ setup(
243
243
  # Usage: coverage run -m pytest; coverage html; coverage report
244
244
  "coverage": [
245
245
  'coverage>=7.6.1;python_version<"3.9"',
246
- 'coverage>=7.10.7;python_version>="3.9"',
246
+ 'coverage>=7.10.7;python_version>="3.9" and python_version<"3.10"',
247
+ 'coverage>=7.11.0;python_version>="3.10"',
247
248
  'pytest-cov>=5.0.0;python_version<"3.9"',
248
249
  'pytest-cov>=7.0.0;python_version>="3.9"',
249
250
  ],
@@ -286,7 +287,8 @@ setup(
286
287
  # (An optional library for image-processing.)
287
288
  "pillow": [
288
289
  'Pillow>=10.4.0;python_version<"3.9"',
289
- 'Pillow>=11.3.0;python_version>="3.9"',
290
+ 'Pillow>=11.3.0;python_version>="3.9" and python_version<"3.10"',
291
+ 'Pillow>=12.0.0;python_version>="3.10"',
290
292
  ],
291
293
  # pip install -e .[pip-system-certs]
292
294
  # (If you see [SSL: CERTIFICATE_VERIFY_FAILED], then get this.)
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes