seleniumbase 4.55.1__tar.gz → 4.55.2__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.55.1/seleniumbase.egg-info → seleniumbase-4.55.2}/PKG-INFO +60 -83
  2. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/README.md +57 -80
  3. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/requirements.txt +2 -2
  4. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.55.1 → seleniumbase-4.55.2/seleniumbase.egg-info}/PKG-INFO +60 -83
  6. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/requires.txt +2 -2
  7. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/setup.py +2 -2
  8. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/.gitignore +0 -0
  9. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/LICENSE +0 -0
  10. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/MANIFEST.in +0 -0
  11. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/install.sh +0 -0
  12. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/mcp_servers/__init__.py +0 -0
  13. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/mcp_servers/server.py +0 -0
  14. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/pyproject.toml +0 -0
  15. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/pytest.ini +0 -0
  16. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/sbase/__init__.py +0 -0
  17. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/sbase/__main__.py +0 -0
  18. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/sbase/steps.py +0 -0
  19. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/__init__.py +0 -0
  20. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/__main__.py +0 -0
  21. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/__init__.py +0 -0
  22. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/behave_helper.py +0 -0
  23. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/behave_sb.py +0 -0
  24. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/behave/steps.py +0 -0
  25. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/__init__.py +0 -0
  26. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/decorators.py +0 -0
  27. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/encryption.py +0 -0
  28. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/exceptions.py +0 -0
  29. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/obfuscate.py +0 -0
  30. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/common/unobfuscate.py +0 -0
  31. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/__init__.py +0 -0
  32. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/ad_block_list.py +0 -0
  33. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/proxy_list.py +0 -0
  34. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/config/settings.py +0 -0
  35. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/__init__.py +0 -0
  36. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/logo_helper.py +0 -0
  37. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/rich_helper.py +0 -0
  38. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/run.py +0 -0
  39. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  40. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  41. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_commander.py +0 -0
  42. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_install.py +0 -0
  43. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  44. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  45. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  46. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  47. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  48. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  49. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_print.py +0 -0
  50. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  51. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/__init__.py +0 -0
  52. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/application_manager.py +0 -0
  53. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/browser_launcher.py +0 -0
  54. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/capabilities_parser.py +0 -0
  55. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/colored_traceback.py +0 -0
  56. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/create_db_tables.sql +0 -0
  57. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/detect_b_ver.py +0 -0
  58. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/download_helper.py +0 -0
  59. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/encoded_images.py +0 -0
  60. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/jqc_helper.py +0 -0
  61. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/log_helper.py +0 -0
  62. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/mysql.py +0 -0
  63. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/nest_asyncio.py +0 -0
  64. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/proxy_helper.py +0 -0
  65. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/recorder_helper.py +0 -0
  66. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/report_helper.py +0 -0
  67. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/s3_manager.py +0 -0
  68. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/sb_cdp.py +0 -0
  69. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/sb_driver.py +0 -0
  70. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/session_helper.py +0 -0
  71. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/settings_parser.py +0 -0
  72. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/style_sheet.py +0 -0
  73. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/testcase_manager.py +0 -0
  74. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/tour_helper.py +0 -0
  75. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/core/visual_helper.py +0 -0
  76. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/__init__.py +0 -0
  77. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  78. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  79. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
  80. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  81. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  82. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  83. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/__init__.py +0 -0
  84. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/ad_block.zip +0 -0
  85. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/disable_csp.zip +0 -0
  86. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/recorder.zip +0 -0
  87. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/extensions/sbase_ext.zip +0 -0
  88. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/__init__.py +0 -0
  89. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/base_case.py +0 -0
  90. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/constants.py +0 -0
  91. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  92. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/errors.py +0 -0
  93. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/js_utils.py +0 -0
  94. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/page_actions.py +0 -0
  95. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/page_utils.py +0 -0
  96. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/shared_utils.py +0 -0
  97. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/unittest_helper.py +0 -0
  98. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/words.py +0 -0
  99. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  100. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/__init__.py +0 -0
  101. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/active_css_js.py +0 -0
  102. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/live_js.py +0 -0
  103. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/js_code/recorder_js.py +0 -0
  104. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/masterqa/__init__.py +0 -0
  105. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/masterqa/master_qa.py +0 -0
  106. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/__init__.py +0 -0
  107. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/base_plugin.py +0 -0
  108. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/basic_test_info.py +0 -0
  109. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  110. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/driver_manager.py +0 -0
  111. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/page_source.py +0 -0
  112. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/pytest_plugin.py +0 -0
  113. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  114. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/sb_manager.py +0 -0
  115. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/screen_shots.py +0 -0
  116. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/plugins/selenium_plugin.py +0 -0
  117. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/resources/__init__.py +0 -0
  118. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/__init__.py +0 -0
  119. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/chinese.py +0 -0
  120. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/dutch.py +0 -0
  121. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/french.py +0 -0
  122. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/italian.py +0 -0
  123. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/japanese.py +0 -0
  124. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/korean.py +0 -0
  125. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/master_dict.py +0 -0
  126. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/portuguese.py +0 -0
  127. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/russian.py +0 -0
  128. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/spanish.py +0 -0
  129. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/translate/translator.py +0 -0
  130. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/__init__.py +0 -0
  131. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp.py +0 -0
  132. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  133. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  134. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  135. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  136. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  137. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  138. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  139. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  140. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/dprocess.py +0 -0
  141. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/options.py +0 -0
  142. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/patcher.py +0 -0
  143. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/reactor.py +0 -0
  144. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/undetected/webelement.py +0 -0
  145. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/__init__.py +0 -0
  146. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  147. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  148. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  149. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  150. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  151. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  152. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  153. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  154. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  155. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  156. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  157. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  158. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  159. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/SOURCES.txt +0 -0
  160. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/dependency_links.txt +0 -0
  161. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/entry_points.txt +0 -0
  162. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/seleniumbase.egg-info/top_level.txt +0 -0
  163. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/setup.cfg +0 -0
  164. {seleniumbase-4.55.1 → seleniumbase-4.55.2}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.55.1
3
+ Version: 4.55.2
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
@@ -100,7 +100,7 @@ Requires-Dist: selenium==4.50.0
100
100
  Requires-Dist: cssselect<2,>=1.5.0
101
101
  Requires-Dist: sortedcontainers==2.4.0
102
102
  Requires-Dist: execnet==2.1.2
103
- Requires-Dist: iniconfig==2.3.0
103
+ Requires-Dist: iniconfig~=2.3.1
104
104
  Requires-Dist: pluggy==1.6.0
105
105
  Requires-Dist: pytest==8.4.2; python_version < "3.11"
106
106
  Requires-Dist: pytest==9.1.1; python_version >= "3.11"
@@ -130,7 +130,7 @@ Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
130
130
  Provides-Extra: flake8
131
131
  Requires-Dist: flake8==7.4.1; extra == "flake8"
132
132
  Requires-Dist: mccabe==0.7.0; extra == "flake8"
133
- Requires-Dist: pyflakes==4.0.2; extra == "flake8"
133
+ Requires-Dist: pyflakes==4.0.3; extra == "flake8"
134
134
  Requires-Dist: pycodestyle==2.15.0; extra == "flake8"
135
135
  Provides-Extra: mcp
136
136
  Requires-Dist: mcp[cli]<3.0.0,>=2.3.0; extra == "mcp"
@@ -173,15 +173,15 @@ Dynamic: summary
173
173
  <!-- mcp-name: io.github.seleniumbase/seleniumbase -->
174
174
 
175
175
  <meta property="og:site_name" content="SeleniumBase">
176
- <meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation with Python; and E2E Testing." />
177
- <meta property="og:description" content="Stealthy Chromium Automation, including fast, easy, and reliable E2E testing with Python." />
178
- <meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots, playwright, stealth, CAPTCHA">
176
+ <meta property="og:title" content="SeleniumBase: Python Web Automation and E2E Testing. Includes stealth options!" />
177
+ <meta property="og:description" content="Fast, easy, and reliable Web/UI testing with Python. Includes stealth options!" />
178
+ <meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
179
179
  <meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
180
- <link rel="icon" href="https://seleniumbase.github.io/img/logo6.png" />
180
+ <link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
181
181
 
182
- <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sbase_text_logo3t.png" alt="SeleniumBase" title="SeleniumBase" width="584" style="max-width: 100% !important; height: auto !important;" /></a></p>
182
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/nice_logo_8t.png" alt="SeleniumBase" width="400" /></a></p>
183
183
 
184
- <p align="center" class="hero__title"><b>End-to-End Testing and Stealthy Automation</b></p>
184
+ <p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
185
185
 
186
186
  <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" 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> <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/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/Tests/badge.svg" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://img.shields.io/badge/docs-📺-F12345.svg?style=flat&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a></p>
187
187
 
@@ -221,80 +221,45 @@ Dynamic: summary
221
221
  <br />
222
222
  </p>
223
223
 
224
- <ul>
225
- <li><b>SeleniumBase bypasses bot-detection with</b> 🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / 🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a><b>.</b></li>
226
- <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>
227
- </ul>
228
- <ul>
229
- </ul>
230
-
231
224
  --------
232
225
 
233
- <b>📝 Here's a Python <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">example</a> that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to PlanetMinecraft where it bypasses the CAPTCHA)
234
-
235
- ```python
236
- from seleniumbase import sb_cdp
237
-
238
- sb = sb_cdp.Chrome()
239
- sb.goto("www.planetminecraft.com/account/sign_in")
240
- sb.solve_captcha()
241
- # "LOG IN" is enabled when the CAPTCHA is bypassed
242
- sb.wait_for_element_absent("input[disabled]")
243
- sb.sleep(2)
244
- sb.quit()
245
- ```
246
-
247
- <p align="center">
248
- <img src="https://seleniumbase.github.io/other/pmc_captcha.png" width="570" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
249
- <br /><em>(Cloudflare Turnstile bypassed successfully)</em>
250
- </p>
226
+ 🥷 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> can bypass bot-detection, handle CAPTCHAs, and call methods from the <a href="https://chromedevtools.github.io/devtools-protocol/" translate="no">Chrome Devtools Protocol</a>. CDP Mode includes <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>, which makes Playwright stealthy.
251
227
 
252
- 💡 <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If no CAPTCHA is present on the current page, then nothing happens.)
228
+ 🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
253
229
 
254
- ----
230
+ 🐙 CDP Mode (stealth) examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
255
231
 
256
- <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b><br />(If the Turnstile isn't bypassed automatically, <b><code>sb.solve_captcha()</code></b> handles it.)</p>
232
+ 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
257
233
 
258
- ```python
259
- from seleniumbase import SB
260
-
261
- with SB(uc=True, test=True, locale="en") as sb:
262
- sb.activate_cdp_mode()
263
- sb.goto("https://gitlab.com/users/sign_in")
264
- sb.sleep(2)
265
- sb.solve_captcha()
266
- sb.highlight('h1:contains("GitLab")')
267
- sb.highlight('button:contains("Sign in")')
268
- ```
269
-
270
- <p align="center">
271
- <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" alt="SeleniumBase" width="350" style="max-width: 100% !important; height: auto !important;"/>
272
- <br /><em>(Successfully bypassed bot-detection on a Cloudflare challenge page)</em>
273
- </p>
234
+ 📚 Examples that have `test_` or `_test` in the filename are specifically designed to run with `pytest` / `pynose`. Other examples run directly with raw `python` (those files generally start with `raw_` to avoid confusion).
274
235
 
275
236
  --------
276
237
 
277
- <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_google.py" target="_blank">This example</a> searches Google for the SeleniumBase GitHub page and outputs the result as a PDF:</b></p>
238
+ <b>📝 Here's a Python <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">example</a> that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to Planet Minecraft where it bypasses the CAPTCHA)
278
239
 
279
240
  ```python
280
241
  from seleniumbase import sb_cdp
281
242
 
282
- sb = sb_cdp.Chrome()
283
- sb.goto("https://google.com/ncr")
284
- sb.click_if_visible('button:contains("Accept all")')
285
- sb.type('[name="q"]', "SeleniumBase site:github.com")
286
- sb.sleep(0.2)
287
- sb.click('[value="Google Search"]')
288
- sb.sleep(1)
289
- sb.click_if_visible('h3:contains("seleniumbase/SeleniumBase")')
290
- sb.sleep(1)
291
- print(sb.get_page_title())
292
- sb.save_as_pdf("seleniumbase.pdf", folder="./downloaded_files/")
293
- print("* PDF saved to ./downloaded_files/seleniumbase.pdf")
243
+ sb = sb_cdp.Chrome(incognito=True)
244
+ sb.goto("https://www.planetminecraft.com/account")
245
+ sb.assert_element('input[name="login"]')
246
+ sb.type('input[name="email"]', "test@example.com")
247
+ sb.type('input[name="password"]', "Fake_Password")
248
+ sb.click("input#autologin") # The checkbox
249
+ if sb.is_element_visible("input[disabled]"):
250
+ sb.solve_captcha() # Enables the input
251
+ sb.assert_element_absent("input[disabled]")
252
+ sb.sleep(1.5)
294
253
  sb.quit()
295
254
  ```
296
255
 
297
- <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/google_search_2.gif" alt="SeleniumBase Test" width="500" style="max-width: 100% !important; height: auto !important;" /></a><br /><em>(The PDF will have all search results if SeleniumBase isn't in the list)</em></p>
256
+ > `python raw_cdp_planetmc.py`
257
+
258
+ <p align="left">
259
+ <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" />
260
+ </p>
261
+
262
+ ✅ <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If called when there's no CAPTCHA on the page, then nothing happens / no-op.)
298
263
 
299
264
  --------
300
265
 
@@ -303,38 +268,46 @@ sb.quit()
303
268
  ```python
304
269
  from seleniumbase import sb_cdp
305
270
 
306
- sb = sb_cdp.Chrome()
271
+ sb = sb_cdp.Chrome(fast=True)
307
272
  sb.goto("https://news.ycombinator.com/submitted?id=seleniumbase")
308
273
  elements = sb.find_elements("span.titleline > a")
309
274
  for element in elements:
310
- print("* %s" % element.text)
275
+ print("* " + element.text)
311
276
  ```
312
277
 
313
- <p align="center">
314
- <img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="500" style="max-width: 100% !important; height: auto !important;"/>
315
- <br /><em>(Hacker News results for "SeleniumBase")</em>
278
+ > `python raw_cdp_yc_news.py`
279
+
280
+ <p align="left">
281
+ <img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
316
282
  </p>
317
283
 
318
284
  --------
319
285
 
320
- 🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
286
+ <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
321
287
 
322
- 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
288
+ ```python
289
+ from seleniumbase import SB
323
290
 
324
- --------
291
+ with SB(uc=True, test=True, locale="en") as sb:
292
+ sb.activate_cdp_mode()
293
+ sb.goto("https://gitlab.com/users/sign_in")
294
+ sb.sleep(2)
295
+ sb.solve_captcha()
296
+ sb.highlight('h1:contains("GitLab")')
297
+ sb.highlight('button:contains("Sign in")')
298
+ ```
325
299
 
326
- <h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
300
+ > `python raw_gitlab.py`
327
301
 
328
- <p align="center">
329
- <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="646" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
330
- <br /><em>(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>.)</em>
302
+ <p align="left">
303
+ <img src="https://seleniumbase.github.io/other/gitlab_bypass_2.png" alt="SeleniumBase" width="420" style="max-width: 100% !important; height: auto !important;"/>
331
304
  </p>
332
305
 
333
306
  --------
334
307
 
335
308
  <h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
336
309
 
337
- <p>💡 You can set the Chromium browser to use via command line parameters:</p>
310
+ <p>💡 You can set which Chromium browser to use via command-line parameters:</p>
338
311
 
339
312
  ```zsh
340
313
  python SCRIPT.py --chromium # Use the unbranded Chromium browser
@@ -353,11 +326,13 @@ sb = sb_cdp.Chrome(use_chromium=True)
353
326
 
354
327
  --------
355
328
 
356
- <h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
329
+ <h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
357
330
 
358
- 📚 The [SeleniumBase/examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder includes over 150 ready-to-run examples of E2E testing. Examples that start with `test_` or end with `_test.py`/`_tests.py` run with `pytest`. Other examples run directly with raw `python` (those generally start with `raw_` to avoid confusion).
331
+ <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="540" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
359
332
 
333
+ --------
360
334
 
335
+ <h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
361
336
 
362
337
  <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This example</a> tests an e-commerce site with <code>pytest</code>:</b></p>
363
338
 
@@ -387,6 +362,8 @@ class MyTestClass(BaseCase):
387
362
 
388
363
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" style="max-width: 100% !important; height: auto !important;" /></a>
389
364
 
365
+ 🥷 For stealth with `pytest`, add `--uc` as a command-line option.
366
+
390
367
  --------
391
368
 
392
369
  <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code>:</b></p>
@@ -413,7 +390,7 @@ pytest test_demo_site.py
413
390
 
414
391
  > Easy to type, click, select, toggle, drag & drop, and more.
415
392
 
416
- (For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
393
+ 📚 For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.
417
394
 
418
395
  --------
419
396
 
@@ -2,15 +2,15 @@
2
2
  <!-- mcp-name: io.github.seleniumbase/seleniumbase -->
3
3
 
4
4
  <meta property="og:site_name" content="SeleniumBase">
5
- <meta property="og:title" content="SeleniumBase: Stealthy Chromium Automation with Python; and E2E Testing." />
6
- <meta property="og:description" content="Stealthy Chromium Automation, including fast, easy, and reliable E2E testing with Python." />
7
- <meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots, playwright, stealth, CAPTCHA">
5
+ <meta property="og:title" content="SeleniumBase: Python Web Automation and E2E Testing. Includes stealth options!" />
6
+ <meta property="og:description" content="Fast, easy, and reliable Web/UI testing with Python. Includes stealth options!" />
7
+ <meta property="og:keywords" content="Python, pytest, selenium, webdriver, testing, automation, seleniumbase, framework, dashboard, recorder, reports, screenshots">
8
8
  <meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
9
- <link rel="icon" href="https://seleniumbase.github.io/img/logo6.png" />
9
+ <link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />
10
10
 
11
- <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/sbase_text_logo3t.png" alt="SeleniumBase" title="SeleniumBase" width="584" style="max-width: 100% !important; height: auto !important;" /></a></p>
11
+ <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/nice_logo_8t.png" alt="SeleniumBase" width="400" /></a></p>
12
12
 
13
- <p align="center" class="hero__title"><b>End-to-End Testing and Stealthy Automation</b></p>
13
+ <p align="center" class="hero__title"><b>All-in-one Browser Automation Framework:<br />Web Crawling / Testing / Scraping / Stealth</b></p>
14
14
 
15
15
  <p align="center"><a href="https://pypi.python.org/pypi/seleniumbase" target="_blank"><img src="https://img.shields.io/pypi/v/seleniumbase.svg?color=3399EE" alt="PyPI version" height="20" /></a> <a href="https://pepy.tech/projects/seleniumbase?timeRange=threeMonths&category=version&includeCIDownloads=true&granularity=daily&viewType=line&versions=*" target="_blank"><img src="https://static.pepy.tech/badge/seleniumbase" alt="SeleniumBase PyPI downloads" 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> <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/actions" target="_blank"><img src="https://github.com/seleniumbase/SeleniumBase/workflows/Tests/badge.svg" alt="SeleniumBase GitHub Actions" height="20" /></a> <a href="https://www.youtube.com/playlist?list=PLp9uKicxkBc5UIlGi2BuE3aWC7JyXpD3m"><img src="https://img.shields.io/badge/docs-📺-F12345.svg?style=flat&logo=YouTube&logoColor=white&label=YouTube" alt="YouTube Channel" height="20" /></a></p>
16
16
 
@@ -50,80 +50,45 @@
50
50
  <br />
51
51
  </p>
52
52
 
53
- <ul>
54
- <li><b>SeleniumBase bypasses bot-detection with</b> 🥷 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / 🐙 <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a><b>.</b></li>
55
- <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>
56
- </ul>
57
- <ul>
58
- </ul>
59
-
60
53
  --------
61
54
 
62
- <b>📝 Here's a Python <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">example</a> that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to PlanetMinecraft where it bypasses the CAPTCHA)
63
-
64
- ```python
65
- from seleniumbase import sb_cdp
66
-
67
- sb = sb_cdp.Chrome()
68
- sb.goto("www.planetminecraft.com/account/sign_in")
69
- sb.solve_captcha()
70
- # "LOG IN" is enabled when the CAPTCHA is bypassed
71
- sb.wait_for_element_absent("input[disabled]")
72
- sb.sleep(2)
73
- sb.quit()
74
- ```
75
-
76
- <p align="center">
77
- <img src="https://seleniumbase.github.io/other/pmc_captcha.png" width="570" style="max-width: 100% !important; height: auto !important;" alt="Cloudflare Turnstile bypassed successfully" />
78
- <br /><em>(Cloudflare Turnstile bypassed successfully)</em>
79
- </p>
55
+ 🥷 Stealth modes: <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/uc_mode.md"><b>UC Mode</b></a> / <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md"><b>CDP Mode</b></a> can bypass bot-detection, handle CAPTCHAs, and call methods from the <a href="https://chromedevtools.github.io/devtools-protocol/" translate="no">Chrome Devtools Protocol</a>. CDP Mode includes <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>, which makes Playwright stealthy.
80
56
 
81
- 💡 <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If no CAPTCHA is present on the current page, then nothing happens.)
57
+ 🧪 End-to-End Testing examples are located in [./examples/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples).
82
58
 
83
- ----
59
+ 🐙 CDP Mode (stealth) examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
84
60
 
85
- <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b><br />(If the Turnstile isn't bypassed automatically, <b><code>sb.solve_captcha()</code></b> handles it.)</p>
61
+ 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
86
62
 
87
- ```python
88
- from seleniumbase import SB
89
-
90
- with SB(uc=True, test=True, locale="en") as sb:
91
- sb.activate_cdp_mode()
92
- sb.goto("https://gitlab.com/users/sign_in")
93
- sb.sleep(2)
94
- sb.solve_captcha()
95
- sb.highlight('h1:contains("GitLab")')
96
- sb.highlight('button:contains("Sign in")')
97
- ```
98
-
99
- <p align="center">
100
- <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" alt="SeleniumBase" width="350" style="max-width: 100% !important; height: auto !important;"/>
101
- <br /><em>(Successfully bypassed bot-detection on a Cloudflare challenge page)</em>
102
- </p>
63
+ 📚 Examples that have `test_` or `_test` in the filename are specifically designed to run with `pytest` / `pynose`. Other examples run directly with raw `python` (those files generally start with `raw_` to avoid confusion).
103
64
 
104
65
  --------
105
66
 
106
- <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_google.py" target="_blank">This example</a> searches Google for the SeleniumBase GitHub page and outputs the result as a PDF:</b></p>
67
+ <b>📝 Here's a Python <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py" target="_blank">example</a> that uses <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp">Pure CDP Mode</a> (<code>sb_cdp</code>):</b><br />(It navigates to Planet Minecraft where it bypasses the CAPTCHA)
107
68
 
108
69
  ```python
109
70
  from seleniumbase import sb_cdp
110
71
 
111
- sb = sb_cdp.Chrome()
112
- sb.goto("https://google.com/ncr")
113
- sb.click_if_visible('button:contains("Accept all")')
114
- sb.type('[name="q"]', "SeleniumBase site:github.com")
115
- sb.sleep(0.2)
116
- sb.click('[value="Google Search"]')
117
- sb.sleep(1)
118
- sb.click_if_visible('h3:contains("seleniumbase/SeleniumBase")')
119
- sb.sleep(1)
120
- print(sb.get_page_title())
121
- sb.save_as_pdf("seleniumbase.pdf", folder="./downloaded_files/")
122
- print("* PDF saved to ./downloaded_files/seleniumbase.pdf")
72
+ sb = sb_cdp.Chrome(incognito=True)
73
+ sb.goto("https://www.planetminecraft.com/account")
74
+ sb.assert_element('input[name="login"]')
75
+ sb.type('input[name="email"]', "test@example.com")
76
+ sb.type('input[name="password"]', "Fake_Password")
77
+ sb.click("input#autologin") # The checkbox
78
+ if sb.is_element_visible("input[disabled]"):
79
+ sb.solve_captcha() # Enables the input
80
+ sb.assert_element_absent("input[disabled]")
81
+ sb.sleep(1.5)
123
82
  sb.quit()
124
83
  ```
125
84
 
126
- <p align="center"><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/google_search_2.gif" alt="SeleniumBase Test" width="500" style="max-width: 100% !important; height: auto !important;" /></a><br /><em>(The PDF will have all search results if SeleniumBase isn't in the list)</em></p>
85
+ > `python raw_cdp_planetmc.py`
86
+
87
+ <p align="left">
88
+ <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" />
89
+ </p>
90
+
91
+ ✅ <b><code>sb.solve_captcha()</code></b> handles CAPTCHAs that aren't bypassed automatically.<br />(If called when there's no CAPTCHA on the page, then nothing happens / no-op.)
127
92
 
128
93
  --------
129
94
 
@@ -132,38 +97,46 @@ sb.quit()
132
97
  ```python
133
98
  from seleniumbase import sb_cdp
134
99
 
135
- sb = sb_cdp.Chrome()
100
+ sb = sb_cdp.Chrome(fast=True)
136
101
  sb.goto("https://news.ycombinator.com/submitted?id=seleniumbase")
137
102
  elements = sb.find_elements("span.titleline > a")
138
103
  for element in elements:
139
- print("* %s" % element.text)
104
+ print("* " + element.text)
140
105
  ```
141
106
 
142
- <p align="center">
143
- <img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="500" style="max-width: 100% !important; height: auto !important;"/>
144
- <br /><em>(Hacker News results for "SeleniumBase")</em>
107
+ > `python raw_cdp_yc_news.py`
108
+
109
+ <p align="left">
110
+ <img src="https://seleniumbase.github.io/other/yc_news_results.png" alt="SeleniumBase" width="510" style="max-width: 100% !important; height: auto !important;"/>
145
111
  </p>
146
112
 
147
113
  --------
148
114
 
149
- 🐙 Stealthy CDP Mode examples are located in [./examples/cdp_mode/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples/cdp_mode).
115
+ <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py" target="_blank">This example</a> bypasses Cloudflare's challenge page with UC + CDP Mode:</b></p>
150
116
 
151
- 🎭 Stealthy Playwright examples are located in [./examples/cdp_mode/playwright/](https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/).
117
+ ```python
118
+ from seleniumbase import SB
152
119
 
153
- --------
120
+ with SB(uc=True, test=True, locale="en") as sb:
121
+ sb.activate_cdp_mode()
122
+ sb.goto("https://gitlab.com/users/sign_in")
123
+ sb.sleep(2)
124
+ sb.solve_captcha()
125
+ sb.highlight('h1:contains("GitLab")')
126
+ sb.highlight('button:contains("Sign in")')
127
+ ```
154
128
 
155
- <h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
129
+ > `python raw_gitlab.py`
156
130
 
157
- <p align="center">
158
- <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="646" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
159
- <br /><em>(For maximum stealth, use <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md">CDP Mode</a>, which includes <a translate="no" href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/playwright/ReadMe.md">Stealthy Playwright Mode</a>.)</em>
131
+ <p align="left">
132
+ <img src="https://seleniumbase.github.io/other/gitlab_bypass_2.png" alt="SeleniumBase" width="420" style="max-width: 100% !important; height: auto !important;"/>
160
133
  </p>
161
134
 
162
135
  --------
163
136
 
164
137
  <h3 align="left">🌐 CLI Options for Supported Chromium Browsers</h3>
165
138
 
166
- <p>💡 You can set the Chromium browser to use via command line parameters:</p>
139
+ <p>💡 You can set which Chromium browser to use via command-line parameters:</p>
167
140
 
168
141
  ```zsh
169
142
  python SCRIPT.py --chromium # Use the unbranded Chromium browser
@@ -182,11 +155,13 @@ sb = sb_cdp.Chrome(use_chromium=True)
182
155
 
183
156
  --------
184
157
 
185
- <h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
158
+ <h3 align="left">⚙️ Stealthy architecture flowchart:</h3>
186
159
 
187
- 📚 The [SeleniumBase/examples/](https://github.com/seleniumbase/SeleniumBase/tree/master/examples) folder includes over 150 ready-to-run examples of E2E testing. Examples that start with `test_` or end with `_test.py`/`_tests.py` run with `pytest`. Other examples run directly with raw `python` (those generally start with `raw_` to avoid confusion).
160
+ <img src="https://seleniumbase.github.io/other/sb_architecture.png" width="540" style="max-width: 100% !important; height: auto !important;" alt="Stealthy architecture flowchart" />
188
161
 
162
+ --------
189
163
 
164
+ <h3>🧪 Comprehensive E2E Testing with <code>pytest</code>:</h3>
190
165
 
191
166
  <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py" target="_blank">This example</a> tests an e-commerce site with <code>pytest</code>:</b></p>
192
167
 
@@ -216,6 +191,8 @@ class MyTestClass(BaseCase):
216
191
 
217
192
  <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_get_swag.py"><img src="https://seleniumbase.github.io/cdn/gif/fast_swag_2.gif" alt="SeleniumBase Test" width="500" style="max-width: 100% !important; height: auto !important;" /></a>
218
193
 
194
+ 🥷 For stealth with `pytest`, add `--uc` as a command-line option.
195
+
219
196
  --------
220
197
 
221
198
  <p align="left"><b>📝 <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/test_coffee_cart.py" target="_blank">This example</a> tests another e-commerce site with <code>pytest</code>:</b></p>
@@ -242,7 +219,7 @@ pytest test_demo_site.py
242
219
 
243
220
  > Easy to type, click, select, toggle, drag & drop, and more.
244
221
 
245
- (For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.)
222
+ 📚 For more examples, see the <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/ReadMe.md">SeleniumBase/examples/</a> folder.
246
223
 
247
224
  --------
248
225
 
@@ -40,7 +40,7 @@ selenium==4.50.0
40
40
  cssselect>=1.5.0,<2
41
41
  sortedcontainers==2.4.0
42
42
  execnet==2.1.2
43
- iniconfig==2.3.0
43
+ iniconfig~=2.3.1
44
44
  pluggy==1.6.0
45
45
  pytest==8.4.2;python_version<"3.11"
46
46
  pytest==9.1.1;python_version>="3.11"
@@ -68,5 +68,5 @@ coverage>=7.16.2
68
68
  pytest-cov>=7.1.0
69
69
  flake8==7.4.1
70
70
  mccabe==0.7.0
71
- pyflakes==4.0.2
71
+ pyflakes==4.0.3
72
72
  pycodestyle==2.15.0
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.55.1"
2
+ __version__ = "4.55.2"