seleniumbase 4.57.0__tar.gz → 4.58.0__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.
Files changed (164) hide show
  1. {seleniumbase-4.57.0/seleniumbase.egg-info → seleniumbase-4.58.0}/PKG-INFO +61 -75
  2. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/README.md +52 -64
  3. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/requirements.txt +6 -6
  4. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/run.py +3 -3
  6. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_install.py +30 -15
  7. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/browser_launcher.py +35 -28
  8. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/sb_cdp.py +20 -4
  9. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/base_case.py +22 -1
  10. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/shared_utils.py +23 -6
  11. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/driver_manager.py +8 -0
  12. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/pytest_plugin.py +16 -0
  13. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/sb_manager.py +9 -1
  14. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/selenium_plugin.py +16 -0
  15. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/browser.py +3 -0
  16. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/cdp_util.py +11 -3
  17. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/config.py +16 -2
  18. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/element.py +93 -50
  19. {seleniumbase-4.57.0 → seleniumbase-4.58.0/seleniumbase.egg-info}/PKG-INFO +61 -75
  20. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase.egg-info/requires.txt +8 -14
  21. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/setup.py +8 -10
  22. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/.gitignore +0 -0
  23. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/LICENSE +0 -0
  24. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/MANIFEST.in +0 -0
  25. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/install.sh +0 -0
  26. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/mcp_servers/__init__.py +0 -0
  27. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/mcp_servers/server.py +0 -0
  28. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/pyproject.toml +0 -0
  29. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/pytest.ini +0 -0
  30. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/sbase/__init__.py +0 -0
  31. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/sbase/__main__.py +0 -0
  32. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/sbase/steps.py +0 -0
  33. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/__init__.py +0 -0
  34. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/__main__.py +0 -0
  35. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/behave/__init__.py +0 -0
  36. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/behave/behave_helper.py +0 -0
  37. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/behave/behave_sb.py +0 -0
  38. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/behave/steps.py +0 -0
  39. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/common/__init__.py +0 -0
  40. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/common/decorators.py +0 -0
  41. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/common/encryption.py +0 -0
  42. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/common/exceptions.py +0 -0
  43. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/common/obfuscate.py +0 -0
  44. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/common/unobfuscate.py +0 -0
  45. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/config/__init__.py +0 -0
  46. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/config/ad_block_list.py +0 -0
  47. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/config/proxy_list.py +0 -0
  48. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/config/settings.py +0 -0
  49. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/__init__.py +0 -0
  50. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
  51. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
  52. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  53. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  54. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
  55. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  56. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  57. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  58. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  59. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  60. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  61. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_print.py +0 -0
  62. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  63. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/__init__.py +0 -0
  64. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/application_manager.py +0 -0
  65. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/capabilities_parser.py +0 -0
  66. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/colored_traceback.py +0 -0
  67. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/create_db_tables.sql +0 -0
  68. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/detect_b_ver.py +0 -0
  69. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/download_helper.py +0 -0
  70. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/encoded_images.py +0 -0
  71. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/jqc_helper.py +0 -0
  72. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/log_helper.py +0 -0
  73. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/mysql.py +0 -0
  74. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/nest_asyncio.py +0 -0
  75. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/proxy_helper.py +0 -0
  76. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/recorder_helper.py +0 -0
  77. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/report_helper.py +0 -0
  78. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/s3_manager.py +0 -0
  79. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/sb_driver.py +0 -0
  80. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/session_helper.py +0 -0
  81. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/settings_parser.py +0 -0
  82. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/style_sheet.py +0 -0
  83. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/testcase_manager.py +0 -0
  84. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/tour_helper.py +0 -0
  85. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/core/visual_helper.py +0 -0
  86. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/__init__.py +0 -0
  87. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  88. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  89. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
  90. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  91. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  92. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  93. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/extensions/__init__.py +0 -0
  94. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/extensions/ad_block.zip +0 -0
  95. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/extensions/disable_csp.zip +0 -0
  96. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/extensions/recorder.zip +0 -0
  97. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
  98. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/__init__.py +0 -0
  99. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/constants.py +0 -0
  100. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  101. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/errors.py +0 -0
  102. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/js_utils.py +0 -0
  103. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/page_actions.py +0 -0
  104. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/page_utils.py +0 -0
  105. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
  106. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/words.py +0 -0
  107. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  108. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/js_code/__init__.py +0 -0
  109. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/js_code/active_css_js.py +0 -0
  110. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/js_code/live_js.py +0 -0
  111. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/js_code/recorder_js.py +0 -0
  112. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/masterqa/__init__.py +0 -0
  113. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/masterqa/master_qa.py +0 -0
  114. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/__init__.py +0 -0
  115. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/base_plugin.py +0 -0
  116. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/basic_test_info.py +0 -0
  117. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  118. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/page_source.py +0 -0
  119. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  120. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/plugins/screen_shots.py +0 -0
  121. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/resources/__init__.py +0 -0
  122. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/__init__.py +0 -0
  123. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/chinese.py +0 -0
  124. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/dutch.py +0 -0
  125. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/french.py +0 -0
  126. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/italian.py +0 -0
  127. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/japanese.py +0 -0
  128. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/korean.py +0 -0
  129. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/master_dict.py +0 -0
  130. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/portuguese.py +0 -0
  131. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/russian.py +0 -0
  132. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/spanish.py +0 -0
  133. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/translate/translator.py +0 -0
  134. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/__init__.py +0 -0
  135. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp.py +0 -0
  136. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  137. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  138. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  139. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  140. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/dprocess.py +0 -0
  141. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/options.py +0 -0
  142. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/patcher.py +0 -0
  143. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/reactor.py +0 -0
  144. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/undetected/webelement.py +0 -0
  145. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/__init__.py +0 -0
  146. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  147. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  148. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  149. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  150. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  151. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  152. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  153. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  154. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  155. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  156. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  157. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  158. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  159. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
  160. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
  161. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase.egg-info/entry_points.txt +0 -0
  162. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/seleniumbase.egg-info/top_level.txt +0 -0
  163. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/setup.cfg +0 -0
  164. {seleniumbase-4.57.0 → seleniumbase-4.58.0}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.57.0
3
+ Version: 4.58.0
4
4
  Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -68,7 +68,7 @@ Requires-Dist: exceptiongroup>=1.3.1
68
68
  Requires-Dist: websockets~=16.1.1; python_version == "3.10"
69
69
  Requires-Dist: websockets>=17.4; python_version >= "3.11"
70
70
  Requires-Dist: filelock==4.1.0; python_version == "3.10"
71
- Requires-Dist: filelock>=4.2.7; python_version >= "3.11"
71
+ Requires-Dist: filelock>=4.2.10; python_version >= "3.11"
72
72
  Requires-Dist: fasteners>=0.20
73
73
  Requires-Dist: mycdp>=1.4.0
74
74
  Requires-Dist: pynose>=1.5.5
@@ -85,7 +85,7 @@ Requires-Dist: pyyaml>=6.0.3
85
85
  Requires-Dist: pygments>=2.20.1
86
86
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
87
87
  Requires-Dist: tabcompleter>=1.4.1
88
- Requires-Dist: pdbp>=1.8.3
88
+ Requires-Dist: pdbp>=1.9.0
89
89
  Requires-Dist: idna>=3.20
90
90
  Requires-Dist: charset-normalizer<4,>=3.5.2
91
91
  Requires-Dist: urllib3<3,>=2.8.0
@@ -116,12 +116,12 @@ Requires-Dist: pytest-xdist==3.8.0
116
116
  Requires-Dist: parameterized==0.9.0
117
117
  Requires-Dist: behave==1.2.6
118
118
  Requires-Dist: soupsieve~=2.10.0; python_version < "3.11.5"
119
- Requires-Dist: soupsieve~=3.0.4; python_version >= "3.11.5"
119
+ Requires-Dist: soupsieve~=4.1.1; python_version >= "3.11.5"
120
120
  Requires-Dist: beautifulsoup4~=4.15.0
121
- Requires-Dist: pyotp~=2.10.0
121
+ Requires-Dist: pyotp~=2.11.2
122
122
  Requires-Dist: python-xlib==0.33; platform_system == "Linux"
123
123
  Requires-Dist: PyAutoGUI>=0.9.54; platform_system == "Linux"
124
- Requires-Dist: markdown-it-py==4.2.0
124
+ Requires-Dist: markdown-it-py==4.3.0
125
125
  Requires-Dist: mdurl==0.1.2
126
126
  Requires-Dist: rich<16,>=15.0.0
127
127
  Provides-Extra: allure
@@ -130,7 +130,7 @@ Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
130
130
  Requires-Dist: allure-behave>=2.16.0; extra == "allure"
131
131
  Provides-Extra: coverage
132
132
  Requires-Dist: coverage>=7.16.2; python_version == "3.10" and extra == "coverage"
133
- Requires-Dist: coverage>=7.17.0; python_version >= "3.11" and extra == "coverage"
133
+ Requires-Dist: coverage>=7.17.3; python_version >= "3.11" and extra == "coverage"
134
134
  Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
135
135
  Provides-Extra: flake8
136
136
  Requires-Dist: flake8==7.4.1; python_version == "3.10" and extra == "flake8"
@@ -157,14 +157,12 @@ Requires-Dist: pip-system-certs>=4.0; platform_system == "Windows" and extra ==
157
157
  Provides-Extra: proxy
158
158
  Requires-Dist: proxy.py==2.4.3; extra == "proxy"
159
159
  Provides-Extra: playwright
160
- Requires-Dist: playwright>=1.64.1; extra == "playwright"
160
+ Requires-Dist: playwright>=1.65.2; extra == "playwright"
161
161
  Requires-Dist: greenlet>=3.5.6; extra == "playwright"
162
- Requires-Dist: pyee>=13.0.1; python_version < "3.12" and extra == "playwright"
163
- Requires-Dist: pyee>=14.0.0; python_version >= "3.12" and extra == "playwright"
164
162
  Provides-Extra: pyautogui
165
163
  Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
166
164
  Provides-Extra: uv
167
- Requires-Dist: uv>=0.13.7; extra == "uv"
165
+ Requires-Dist: uv>=0.13.8; extra == "uv"
168
166
  Dynamic: author
169
167
  Dynamic: author-email
170
168
  Dynamic: classifier
@@ -189,19 +187,10 @@ Dynamic: summary
189
187
  <meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
190
188
  <link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
191
189
 
192
- <h1 align="center">📊 SeleniumBase</h1>
193
-
194
- <h3 align="center">APIs for Web Scraping, Browser Automation, and E2E Testing.<br /></h3>
195
-
196
- <p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
197
-
198
- <p align="center">
199
- <a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank" rel="noopener"><img src="https://img.shields.io/github/actions/workflow/status/seleniumbase/SeleniumBase/python-package.yml?branch=master&style=flat-square&label=CI" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://seleniumbase.io" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_info-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a><br />
200
- <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank" rel="noopener"> <img src="https://img.shields.io/badge/Facebook-4K_followers-1877F2?style=flat-square&logo=facebook&logoColor=white" alt="SeleniumBase Facebook Followers" height="20" /></a> <a href="https://x.com/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/-1K_followers-1DA1F2?style=flat-square&logo=x&logoColor=white&labelColor=555555" alt="SeleniumBase X Followers" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><img src="https://img.shields.io/discord/727927627830001734?style=flat-square&color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
201
- </p>
190
+ <h3 align="center" class="hero__title"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/nice_logo_8t.png" alt="SeleniumBase" title="SeleniumBase" width="450" /></a><br /><b>A Complete Browser Automation Experience:<br />Web Crawling / Testing / Scraping / Stealth</b></h3>
202
191
 
203
192
  <p align="center">
204
- <a href="https://trendshift.io/repositories/12493?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-12493" target="_blank" rel="noopener"><img src="https://trendshift.io/api/badge/repositories/12493" alt="seleniumbase%2SeleniumBase | Trendshift" width="250" height="55"/></a>
193
+ <a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank" rel="noopener"><img src="https://flat.badgen.net/github/checks/seleniumbase/SeleniumBase/master?label=CI&" alt="CI Status" height="20" /></a> <a href="https://seleniumbase.io" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a><br /><a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_info-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a> <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
205
194
  </p>
206
195
 
207
196
  <p align="center">
@@ -210,16 +199,16 @@ Dynamic: summary
210
199
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
211
200
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
212
201
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">💻 Scripts</a> |
213
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a>
202
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locales</a>
214
203
  <br />
215
204
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📗 API</a> |
216
205
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/cdp_mode_methods.md">📘 Stealth API</a> |
217
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 DesignPatterns</a> |
206
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntax Formats</a> |
218
207
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
219
208
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a>
220
209
  <br />
221
210
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
222
- <a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
211
+ <a href="https://seleniumbase.io/demo_page">📰 Test Page</a> |
223
212
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
224
213
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
225
214
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
@@ -232,60 +221,68 @@ Dynamic: summary
232
221
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
233
222
  <br />
234
223
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/mcp_servers/">🤖 MCP</a> |
235
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS Mgr</a> |
224
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS Tools</a> |
236
225
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
237
226
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
238
227
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
239
228
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CPlans</a>
240
229
  </p>
241
230
 
231
+ <h4>SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.</h4>
232
+
242
233
  --------
243
234
 
244
- 🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> bypasses bot-detection and <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">makes <span translate="no">Playwright</span> stealthy</a>.
235
+ 📚 Learn from [**over 200 examples** in **SeleniumBase/examples/**](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
236
+
237
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/cdn/gif/google_search.gif" alt="SeleniumBase Google Search" title="SeleniumBase Google Search" width="480" /></a></p>
238
+
239
+ --------
240
+
241
+ <h3 align="left"><img src="https://seleniumbase.io/img/logo6.png" title="SeleniumBase" width="32" /> SeleniumBase Chromium architecture and modes:</h3>
242
+
243
+ <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="600" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
244
+
245
+ > (*Note that "Regular Mode" also supports Safari/WebKit and Firefox/Gecko.*)
246
+
247
+ <ul>
248
+ <li>🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> <b>bypasses bot-detection with Chromium-based browsers.</b></li>
249
+ <li>🎭 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a> <b>extends CDP Mode's stealth to Playwright.</b></li>
250
+ </ul>
251
+
252
+ --------
253
+
254
+ 🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
255
+
256
+ 🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
257
+
258
+ 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
245
259
 
246
- ℹ️ Example scripts that start or end with "<code>test</code>" run with <code><b>pytest</b></code>. Other scripts run directly with raw <code><b>python</b></code> (and start with "<code>raw</code>" to avoid confusion).
260
+ > [!NOTE]
261
+ > Examples that start with `test` run with **`pytest`**.<br />
262
+ > Other examples run directly with raw **`python`**.
247
263
 
248
264
  --------
249
265
 
250
- 📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It bypasses BrowserScan, Sannysoft, and Cloudflare bot-detection)</em>
266
+ 📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It shows some basic methods and bypasses a Cloudflare Turnstile)</em>
251
267
 
252
268
  ```python
253
269
  from seleniumbase import sb_cdp
254
270
 
255
271
  sb = sb_cdp.Chrome() # Launch a stealth browser
256
- sb.goto("https://browserscan.net/bot-detection")
257
- sb.assert_element('strong:contains("Normal")')
258
- sb.sleep(1)
259
-
260
- sb.goto("https://bot.sannysoft.com/")
261
- sb.assert_element(".passed")
262
- sb.assert_element_not_visible(".failed")
263
- sb.sleep(1)
264
-
265
272
  sb.goto("https://www.planetminecraft.com/account")
266
- sb.type('[name="email"]', "Name123")
273
+ sb.type('[name="email"]', "Test123")
267
274
  sb.type('[name="password"]', "Pass")
268
- sb.click("input#autologin")
269
- sb.solve_captcha() # Works on different CAPTCHAs
275
+ sb.click("input#autologin") # Uncheck a checkbox
276
+ sb.solve_captcha() # (fallback if not automatic)
270
277
  sb.assert_element('input[name="login"]')
271
278
  sb.assert_element_not_visible("input[disabled]")
272
- sb.sleep(1)
273
- sb.quit() # Quit browser before end-of-program
279
+ sb.sleep(1) # (see the live demo more easily)
280
+ sb.quit()
274
281
  ```
275
282
 
276
- <p align="center">
277
- <img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="520" style="max-width: 100% !important; height: auto !important;" alt="BrowserScan Test Results: Normal" />
278
- <br /><em>(All BrowserScan bot-detection tests passed successfully)</em>
279
- </p>
280
-
281
- <p align="center">
282
- <img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="428" style="max-width: 100% !important; height: auto !important;" alt="All Sannysoft tests passed successfully" />
283
- <br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
284
- </p>
285
-
286
- <p align="center">
287
- <img src="https://seleniumbase.github.io/other/pmc_captcha_2.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
288
- <br /><em>(Cloudflare Turnstile bypassed successfully on Planet Minecraft)</em>
283
+ <p align="left">
284
+ <img src="https://seleniumbase.github.io/other/pmc_captcha_3.png" width="572" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
285
+ <br /><em>(Note: In this example, the click only unchecks the "Stay signed in" checkbox.)</em>
289
286
  </p>
290
287
 
291
288
  --------
@@ -296,7 +293,7 @@ sb.quit() # Quit browser before end-of-program
296
293
 
297
294
  --------
298
295
 
299
- <p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> scrapes Hacker News listings:</p>
296
+ <p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> searches Hacker News via Algolia. Then prints items and saves to PDF:</p>
300
297
 
301
298
  ```python
302
299
  from seleniumbase import sb_cdp
@@ -305,7 +302,9 @@ sb = sb_cdp.Chrome(fast=True)
305
302
  sb.goto("https://hn.algolia.com/?query=seleniumbase")
306
303
  elements = sb.find_elements("div.Story_title > a")
307
304
  for element in elements:
308
- print("* " + element.text)
305
+ print("--> " + element.text)
306
+ sb.save_as_pdf("sb_news.pdf", folder="./downloaded_files/")
307
+ print("*** PDF saved to: ./downloaded_files/sb_news.pdf")
309
308
  ```
310
309
 
311
310
  ```
@@ -313,7 +312,7 @@ python raw_cdp_yc_news.py
313
312
  ```
314
313
 
315
314
  <p align="left">
316
- <img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
315
+ <img src="https://seleniumbase.github.io/other/yc_news_results_2.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
317
316
  </p>
318
317
 
319
318
  --------
@@ -342,14 +341,6 @@ python raw_gitlab.py
342
341
 
343
342
  --------
344
343
 
345
- 🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
346
-
347
- 🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
348
-
349
- 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
350
-
351
- --------
352
-
353
344
  <h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
354
345
 
355
346
  <p>💡 You can set which Chromium browser to use via command-line parameters:</p>
@@ -371,12 +362,6 @@ sb = sb_cdp.Chrome(use_chromium=True)
371
362
 
372
363
  --------
373
364
 
374
- <h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
375
-
376
- <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
377
-
378
- --------
379
-
380
365
  <h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
381
366
 
382
367
  <p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank" rel="noopener">This script</a> tests an e-commerce site: (Runs with <b><code>pytest</code></b>):</p>
@@ -465,7 +450,7 @@ pytest test_demo_site.py
465
450
 
466
451
  --------
467
452
 
468
- <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
453
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="248" /></a></p>
469
454
 
470
455
  <blockquote>
471
456
  <p dir="auto"><strong>Explore the README:</strong></p>
@@ -1019,6 +1004,7 @@ pytest test_coffee_cart.py --trace
1019
1004
  --rs | --reuse-session # (Reuse browser session for all tests.)
1020
1005
  --rcs | --reuse-class-session # (Reuse session for tests in class.)
1021
1006
  --crumbs # (Delete all cookies between tests reusing a session.)
1007
+ --no-tt # (Skips "--test-type" when using Proxy Mode. Adds stealth.)
1022
1008
  --disable-beforeunload # (Disable the "beforeunload" event on Chrome.)
1023
1009
  --window-position=X,Y # (Set the browser's starting window position.)
1024
1010
  --window-size=WIDTH,HEIGHT # (Set the browser's starting window size.)
@@ -1695,7 +1681,7 @@ pytest --reruns=1 --reruns-delay=1
1695
1681
 
1696
1682
  <p><div><b><a href="https://github.com/mdmintz" target="_blank" rel="noopener">https://github.com/mdmintz</a></b></div></p>
1697
1683
 
1698
- <div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="310" style="max-width: 100% !important; height: auto !important;" /></a></div>
1684
+ <div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb6.png" title="SeleniumBase" width="310" style="max-width: 100% !important; height: auto !important;" /></a></div>
1699
1685
  <div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a> <img src="https://views.whatilearened.today/views/github/seleniumbase/SeleniumBase.svg" width="98px" height="20px" alt="Views" /></div>
1700
1686
  <div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" height="20" /></a> </div>
1701
1687
  <div align="left"></div>
@@ -8,19 +8,10 @@
8
8
  <meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
9
9
  <link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
10
10
 
11
- <h1 align="center">📊 SeleniumBase</h1>
12
-
13
- <h3 align="center">APIs for Web Scraping, Browser Automation, and E2E Testing.<br /></h3>
14
-
15
- <p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
16
-
17
- <p align="center">
18
- <a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank" rel="noopener"><img src="https://img.shields.io/github/actions/workflow/status/seleniumbase/SeleniumBase/python-package.yml?branch=master&style=flat-square&label=CI" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://seleniumbase.io" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_info-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a><br />
19
- <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://www.facebook.com/SeleniumBase/" target="_blank" rel="noopener"> <img src="https://img.shields.io/badge/Facebook-4K_followers-1877F2?style=flat-square&logo=facebook&logoColor=white" alt="SeleniumBase Facebook Followers" height="20" /></a> <a href="https://x.com/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/-1K_followers-1DA1F2?style=flat-square&logo=x&logoColor=white&labelColor=555555" alt="SeleniumBase X Followers" height="20" /></a> <a href="https://discord.gg/EdhQTn3EyE" target="_blank" rel="noopener"><img src="https://img.shields.io/discord/727927627830001734?style=flat-square&color=7289DA&label=Discord&logo=discord&logoColor=white" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
20
- </p>
11
+ <h3 align="center" class="hero__title"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/nice_logo_8t.png" alt="SeleniumBase" title="SeleniumBase" width="450" /></a><br /><b>A Complete Browser Automation Experience:<br />Web Crawling / Testing / Scraping / Stealth</b></h3>
21
12
 
22
13
  <p align="center">
23
- <a href="https://trendshift.io/repositories/12493?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-12493" target="_blank" rel="noopener"><img src="https://trendshift.io/api/badge/repositories/12493" alt="seleniumbase%2SeleniumBase | Trendshift" width="250" height="55"/></a>
14
+ <a href="https://pypi.python.org/pypi/seleniumbase" target="_blank" rel="noopener"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?style=flat-square&color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/actions" target="_blank" rel="noopener"><img src="https://flat.badgen.net/github/checks/seleniumbase/SeleniumBase/master?label=CI&" alt="CI Status" height="20" /></a> <a href="https://seleniumbase.io" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg?style=flat-square" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/license-MIT-33A6C6.svg?style=flat-square" title="SeleniumBase" height="20" /></a><br /><a href="https://github.com/seleniumbase/SeleniumBase/tree/master/mcp_servers" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/MCP-tool_info-7C6EE5?style=flat-square" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank" rel="noopener"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" height="20" /></a> <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m" target="_blank" rel="noopener"><img src="https://img.shields.io/badge/docs-📺-D844E8.svg?style=flat-square&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase" target="_blank" rel="noopener"><img src="https://badgen.net/github/stars/seleniumbase/SeleniumBase" title="Stars" height="20" /></a>
24
15
  </p>
25
16
 
26
17
  <p align="center">
@@ -29,16 +20,16 @@
29
20
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/customizing_test_runs.md">🎛️ Options</a> |
30
21
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">📚 Examples</a> |
31
22
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/seleniumbase/console_scripts/ReadMe.md">💻 Scripts</a> |
32
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locale</a>
23
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/locale_codes.md">🗾 Locales</a>
33
24
  <br />
34
25
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/method_summary.md">📗 API</a> |
35
26
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/cdp_mode_methods.md">📘 Stealth API</a> |
36
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 DesignPatterns</a> |
27
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md"> 🔠 Syntax Formats</a> |
37
28
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/recorder_mode.md">🔴 Recorder</a> |
38
29
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/example_logs/ReadMe.md">📊 Dashboard</a>
39
30
  <br />
40
31
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/commander.md">🎖️ GUI</a> |
41
- <a href="https://seleniumbase.io/demo_page">📰 TestPage</a> |
32
+ <a href="https://seleniumbase.io/demo_page">📰 Test Page</a> |
42
33
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md">👤 UC Mode</a> |
43
34
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">🐙 CDP Mode</a> |
44
35
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/chart_maker/ReadMe.md">📶 Charts</a> |
@@ -51,60 +42,68 @@
51
42
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/tour_examples/ReadMe.md">🚎 Tours</a>
52
43
  <br />
53
44
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/mcp_servers/">🤖 MCP</a> |
54
- <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS Mgr</a> |
45
+ <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/js_package_manager.md">🟨 JS Tools</a> |
55
46
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/translations.md">🌏 Translator</a> |
56
47
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/presenter/ReadMe.md">🎞️ Presenter</a> |
57
48
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/visual_testing/ReadMe.md">🖼️ Visual</a> |
58
49
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/case_plans.md">🗂️ CPlans</a>
59
50
  </p>
60
51
 
52
+ <h4>SeleniumBase is the professional toolkit for web automation activities. Built for testing websites, bypassing CAPTCHAs, enhancing productivity, completing tasks, and scaling your business.</h4>
53
+
61
54
  --------
62
55
 
63
- 🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> bypasses bot-detection and <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">makes <span translate="no">Playwright</span> stealthy</a>.
56
+ 📚 Learn from [**over 200 examples** in **SeleniumBase/examples/**](https://github.com/seleniumbase/SeleniumBase/tree/master/examples).
57
+
58
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/tree/master/examples" target="_blank" rel="noopener"><img src="https://seleniumbase.github.io/cdn/gif/google_search.gif" alt="SeleniumBase Google Search" title="SeleniumBase Google Search" width="480" /></a></p>
59
+
60
+ --------
61
+
62
+ <h3 align="left"><img src="https://seleniumbase.io/img/logo6.png" title="SeleniumBase" width="32" /> SeleniumBase Chromium architecture and modes:</h3>
63
+
64
+ <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="600" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
65
+
66
+ > (*Note that "Regular Mode" also supports Safari/WebKit and Firefox/Gecko.*)
67
+
68
+ <ul>
69
+ <li>🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> <b>bypasses bot-detection with Chromium-based browsers.</b></li>
70
+ <li>🎭 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md"><b><span translate="no">Stealthy Playwright Mode</span></b></a> <b>extends CDP Mode's stealth to Playwright.</b></li>
71
+ </ul>
72
+
73
+ --------
74
+
75
+ 🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
76
+
77
+ 🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
78
+
79
+ 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
64
80
 
65
- ℹ️ Example scripts that start or end with "<code>test</code>" run with <code><b>pytest</b></code>. Other scripts run directly with raw <code><b>python</b></code> (and start with "<code>raw</code>" to avoid confusion).
81
+ > [!NOTE]
82
+ > Examples that start with `test` run with **`pytest`**.<br />
83
+ > Other examples run directly with raw **`python`**.
66
84
 
67
85
  --------
68
86
 
69
- 📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It bypasses BrowserScan, Sannysoft, and Cloudflare bot-detection)</em>
87
+ 📝 [This example](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_mode.py) uses <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (*[Pure CDP Mode](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#Pure_CDP_Mode)*):<br /><em>(It shows some basic methods and bypasses a Cloudflare Turnstile)</em>
70
88
 
71
89
  ```python
72
90
  from seleniumbase import sb_cdp
73
91
 
74
92
  sb = sb_cdp.Chrome() # Launch a stealth browser
75
- sb.goto("https://browserscan.net/bot-detection")
76
- sb.assert_element('strong:contains("Normal")')
77
- sb.sleep(1)
78
-
79
- sb.goto("https://bot.sannysoft.com/")
80
- sb.assert_element(".passed")
81
- sb.assert_element_not_visible(".failed")
82
- sb.sleep(1)
83
-
84
93
  sb.goto("https://www.planetminecraft.com/account")
85
- sb.type('[name="email"]', "Name123")
94
+ sb.type('[name="email"]', "Test123")
86
95
  sb.type('[name="password"]', "Pass")
87
- sb.click("input#autologin")
88
- sb.solve_captcha() # Works on different CAPTCHAs
96
+ sb.click("input#autologin") # Uncheck a checkbox
97
+ sb.solve_captcha() # (fallback if not automatic)
89
98
  sb.assert_element('input[name="login"]')
90
99
  sb.assert_element_not_visible("input[disabled]")
91
- sb.sleep(1)
92
- sb.quit() # Quit browser before end-of-program
100
+ sb.sleep(1) # (see the live demo more easily)
101
+ sb.quit()
93
102
  ```
94
103
 
95
- <p align="center">
96
- <img src="https://seleniumbase.github.io/cdn/img/results_normal.jpg" width="520" style="max-width: 100% !important; height: auto !important;" alt="BrowserScan Test Results: Normal" />
97
- <br /><em>(All BrowserScan bot-detection tests passed successfully)</em>
98
- </p>
99
-
100
- <p align="center">
101
- <img src="https://seleniumbase.github.io/other/sannysoft_success.jpg" width="428" style="max-width: 100% !important; height: auto !important;" alt="All Sannysoft tests passed successfully" />
102
- <br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
103
- </p>
104
-
105
- <p align="center">
106
- <img src="https://seleniumbase.github.io/other/pmc_captcha_2.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
107
- <br /><em>(Cloudflare Turnstile bypassed successfully on Planet Minecraft)</em>
104
+ <p align="left">
105
+ <img src="https://seleniumbase.github.io/other/pmc_captcha_3.png" width="572" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
106
+ <br /><em>(Note: In this example, the click only unchecks the "Stay signed in" checkbox.)</em>
108
107
  </p>
109
108
 
110
109
  --------
@@ -115,7 +114,7 @@ sb.quit() # Quit browser before end-of-program
115
114
 
116
115
  --------
117
116
 
118
- <p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> scrapes Hacker News listings:</p>
117
+ <p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_yc_news.py" target="_blank" rel="noopener">This script</a> searches Hacker News via Algolia. Then prints items and saves to PDF:</p>
119
118
 
120
119
  ```python
121
120
  from seleniumbase import sb_cdp
@@ -124,7 +123,9 @@ sb = sb_cdp.Chrome(fast=True)
124
123
  sb.goto("https://hn.algolia.com/?query=seleniumbase")
125
124
  elements = sb.find_elements("div.Story_title > a")
126
125
  for element in elements:
127
- print("* " + element.text)
126
+ print("--> " + element.text)
127
+ sb.save_as_pdf("sb_news.pdf", folder="./downloaded_files/")
128
+ print("*** PDF saved to: ./downloaded_files/sb_news.pdf")
128
129
  ```
129
130
 
130
131
  ```
@@ -132,7 +133,7 @@ python raw_cdp_yc_news.py
132
133
  ```
133
134
 
134
135
  <p align="left">
135
- <img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
136
+ <img src="https://seleniumbase.github.io/other/yc_news_results_2.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
136
137
  </p>
137
138
 
138
139
  --------
@@ -161,14 +162,6 @@ python raw_gitlab.py
161
162
 
162
163
  --------
163
164
 
164
- 🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
165
-
166
- 🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
167
-
168
- 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
169
-
170
- --------
171
-
172
165
  <h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
173
166
 
174
167
  <p>💡 You can set which Chromium browser to use via command-line parameters:</p>
@@ -190,12 +183,6 @@ sb = sb_cdp.Chrome(use_chromium=True)
190
183
 
191
184
  --------
192
185
 
193
- <h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
194
-
195
- <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="530" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
196
-
197
- --------
198
-
199
186
  <h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
200
187
 
201
188
  <p align="left">📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank" rel="noopener">This script</a> tests an e-commerce site: (Runs with <b><code>pytest</code></b>):</p>
@@ -284,7 +271,7 @@ pytest test_demo_site.py
284
271
 
285
272
  --------
286
273
 
287
- <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="232" /></a></p>
274
+ <p align="left"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" alt="SeleniumBase" title="SeleniumBase" width="248" /></a></p>
288
275
 
289
276
  <blockquote>
290
277
  <p dir="auto"><strong>Explore the README:</strong></p>
@@ -838,6 +825,7 @@ pytest test_coffee_cart.py --trace
838
825
  --rs | --reuse-session # (Reuse browser session for all tests.)
839
826
  --rcs | --reuse-class-session # (Reuse session for tests in class.)
840
827
  --crumbs # (Delete all cookies between tests reusing a session.)
828
+ --no-tt # (Skips "--test-type" when using Proxy Mode. Adds stealth.)
841
829
  --disable-beforeunload # (Disable the "beforeunload" event on Chrome.)
842
830
  --window-position=X,Y # (Set the browser's starting window position.)
843
831
  --window-size=WIDTH,HEIGHT # (Set the browser's starting window size.)
@@ -1514,7 +1502,7 @@ pytest --reruns=1 --reruns-delay=1
1514
1502
 
1515
1503
  <p><div><b><a href="https://github.com/mdmintz" target="_blank" rel="noopener">https://github.com/mdmintz</a></b></div></p>
1516
1504
 
1517
- <div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="310" style="max-width: 100% !important; height: auto !important;" /></a></div>
1505
+ <div><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb6.png" title="SeleniumBase" width="310" style="max-width: 100% !important; height: auto !important;" /></a></div>
1518
1506
  <div><a href="https://github.com/seleniumbase/SeleniumBase"><img src="https://img.shields.io/badge/tested%20with-SeleniumBase-04C38E.svg" alt="Tested with SeleniumBase" /></a> <img src="https://views.whatilearened.today/views/github/seleniumbase/SeleniumBase.svg" width="98px" height="20px" alt="Views" /></div>
1519
1507
  <div><a href="https://seleniumbase.io"><img src="https://img.shields.io/badge/docs-seleniumbase.io-11BBAA.svg" alt="SeleniumBase Docs" height="20" /></a> <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/LICENSE"><img src="https://img.shields.io/badge/license-MIT-22BBCC.svg" title="SeleniumBase" height="20" /></a> </div>
1520
1508
  <div align="left"></div>
@@ -8,7 +8,7 @@ exceptiongroup>=1.3.1
8
8
  websockets~=16.1.1;python_version=="3.10"
9
9
  websockets>=17.4;python_version>="3.11"
10
10
  filelock==4.1.0;python_version=="3.10"
11
- filelock>=4.2.7;python_version>="3.11"
11
+ filelock>=4.2.10;python_version>="3.11"
12
12
  fasteners>=0.20
13
13
  mycdp>=1.4.0
14
14
  pynose>=1.5.5
@@ -25,7 +25,7 @@ pyyaml>=6.0.3
25
25
  pygments>=2.20.1
26
26
  pyreadline3>=3.5.4;platform_system=="Windows"
27
27
  tabcompleter>=1.4.1
28
- pdbp>=1.8.3
28
+ pdbp>=1.9.0
29
29
  idna>=3.20
30
30
  charset-normalizer>=3.5.2,<4
31
31
  urllib3>=2.8.0,<3
@@ -56,12 +56,12 @@ pytest-xdist==3.8.0
56
56
  parameterized==0.9.0
57
57
  behave==1.2.6
58
58
  soupsieve~=2.10.0;python_version<"3.11.5"
59
- soupsieve~=3.0.4;python_version>="3.11.5"
59
+ soupsieve~=4.1.1;python_version>="3.11.5"
60
60
  beautifulsoup4~=4.15.0
61
- pyotp~=2.10.0
61
+ pyotp~=2.11.2
62
62
  python-xlib==0.33;platform_system=="Linux"
63
63
  PyAutoGUI>=0.9.54;platform_system=="Linux"
64
- markdown-it-py==4.2.0
64
+ markdown-it-py==4.3.0
65
65
  mdurl==0.1.2
66
66
  rich>=15.0.0,<16
67
67
 
@@ -69,7 +69,7 @@ rich>=15.0.0,<16
69
69
  # ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
70
70
 
71
71
  coverage>=7.16.2;python_version=="3.10"
72
- coverage>=7.17.0;python_version>="3.11"
72
+ coverage>=7.17.3;python_version>="3.11"
73
73
  pytest-cov>=7.1.0
74
74
  flake8==7.4.1;python_version=="3.10"
75
75
  flake8==7.5.0;python_version>="3.11"
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.57.0"
2
+ __version__ = "4.58.0"