seleniumbase 4.56.4__tar.gz → 4.56.5__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.56.4/seleniumbase.egg-info → seleniumbase-4.56.5}/PKG-INFO +34 -52
  2. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/README.md +28 -48
  3. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/requirements.txt +4 -2
  4. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/__version__.py +1 -1
  5. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/base_case.py +1 -1
  6. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/page_utils.py +1 -1
  7. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/element.py +2 -1
  8. {seleniumbase-4.56.4 → seleniumbase-4.56.5/seleniumbase.egg-info}/PKG-INFO +34 -52
  9. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase.egg-info/requires.txt +9 -3
  10. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/setup.py +6 -4
  11. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/.gitignore +0 -0
  12. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/LICENSE +0 -0
  13. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/MANIFEST.in +0 -0
  14. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/install.sh +0 -0
  15. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/mcp_servers/__init__.py +0 -0
  16. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/mcp_servers/server.py +0 -0
  17. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/pyproject.toml +0 -0
  18. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/pytest.ini +0 -0
  19. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/sbase/__init__.py +0 -0
  20. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/sbase/__main__.py +0 -0
  21. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/sbase/steps.py +0 -0
  22. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/__init__.py +0 -0
  23. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/__main__.py +0 -0
  24. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/behave/__init__.py +0 -0
  25. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/behave/behave_helper.py +0 -0
  26. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/behave/behave_sb.py +0 -0
  27. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/behave/steps.py +0 -0
  28. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/common/__init__.py +0 -0
  29. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/common/decorators.py +0 -0
  30. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/common/encryption.py +0 -0
  31. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/common/exceptions.py +0 -0
  32. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/common/obfuscate.py +0 -0
  33. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/common/unobfuscate.py +0 -0
  34. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/config/__init__.py +0 -0
  35. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/config/ad_block_list.py +0 -0
  36. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/config/proxy_list.py +0 -0
  37. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/config/settings.py +0 -0
  38. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/__init__.py +0 -0
  39. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/logo_helper.py +0 -0
  40. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/rich_helper.py +0 -0
  41. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/run.py +0 -0
  42. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  43. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  44. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_commander.py +0 -0
  45. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_install.py +0 -0
  46. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  47. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  48. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  49. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  50. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  51. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  52. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_print.py +0 -0
  53. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  54. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/__init__.py +0 -0
  55. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/application_manager.py +0 -0
  56. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/browser_launcher.py +0 -0
  57. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/capabilities_parser.py +0 -0
  58. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/colored_traceback.py +0 -0
  59. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/create_db_tables.sql +0 -0
  60. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/detect_b_ver.py +0 -0
  61. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/download_helper.py +0 -0
  62. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/encoded_images.py +0 -0
  63. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/jqc_helper.py +0 -0
  64. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/log_helper.py +0 -0
  65. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/mysql.py +0 -0
  66. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/nest_asyncio.py +0 -0
  67. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/proxy_helper.py +0 -0
  68. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/recorder_helper.py +0 -0
  69. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/report_helper.py +0 -0
  70. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/s3_manager.py +0 -0
  71. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/sb_cdp.py +0 -0
  72. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/sb_driver.py +0 -0
  73. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/session_helper.py +0 -0
  74. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/settings_parser.py +0 -0
  75. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/style_sheet.py +0 -0
  76. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/testcase_manager.py +0 -0
  77. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/tour_helper.py +0 -0
  78. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/core/visual_helper.py +0 -0
  79. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/__init__.py +0 -0
  80. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  81. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  82. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
  83. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  84. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  85. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  86. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/extensions/__init__.py +0 -0
  87. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/extensions/ad_block.zip +0 -0
  88. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/extensions/disable_csp.zip +0 -0
  89. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/extensions/recorder.zip +0 -0
  90. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/extensions/sbase_ext.zip +0 -0
  91. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/__init__.py +0 -0
  92. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/constants.py +0 -0
  93. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  94. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/errors.py +0 -0
  95. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/js_utils.py +0 -0
  96. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/page_actions.py +0 -0
  97. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/shared_utils.py +0 -0
  98. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/unittest_helper.py +0 -0
  99. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/words.py +0 -0
  100. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  101. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/js_code/__init__.py +0 -0
  102. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/js_code/active_css_js.py +0 -0
  103. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/js_code/live_js.py +0 -0
  104. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/js_code/recorder_js.py +0 -0
  105. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/masterqa/__init__.py +0 -0
  106. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/masterqa/master_qa.py +0 -0
  107. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/__init__.py +0 -0
  108. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/base_plugin.py +0 -0
  109. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/basic_test_info.py +0 -0
  110. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  111. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/driver_manager.py +0 -0
  112. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/page_source.py +0 -0
  113. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/pytest_plugin.py +0 -0
  114. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  115. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/sb_manager.py +0 -0
  116. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/screen_shots.py +0 -0
  117. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/plugins/selenium_plugin.py +0 -0
  118. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/resources/__init__.py +0 -0
  119. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/__init__.py +0 -0
  120. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/chinese.py +0 -0
  121. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/dutch.py +0 -0
  122. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/french.py +0 -0
  123. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/italian.py +0 -0
  124. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/japanese.py +0 -0
  125. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/korean.py +0 -0
  126. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/master_dict.py +0 -0
  127. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/portuguese.py +0 -0
  128. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/russian.py +0 -0
  129. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/spanish.py +0 -0
  130. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/translate/translator.py +0 -0
  131. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/__init__.py +0 -0
  132. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp.py +0 -0
  133. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  134. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  135. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  136. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  137. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  138. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  139. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  140. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/dprocess.py +0 -0
  141. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/options.py +0 -0
  142. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/patcher.py +0 -0
  143. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/reactor.py +0 -0
  144. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/undetected/webelement.py +0 -0
  145. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/__init__.py +0 -0
  146. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  147. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  148. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  149. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  150. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  151. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  152. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  153. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  154. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  155. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  156. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  157. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  158. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  159. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase.egg-info/SOURCES.txt +0 -0
  160. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase.egg-info/dependency_links.txt +0 -0
  161. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase.egg-info/entry_points.txt +0 -0
  162. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/seleniumbase.egg-info/top_level.txt +0 -0
  163. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/setup.cfg +0 -0
  164. {seleniumbase-4.56.4 → seleniumbase-4.56.5}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.56.4
3
+ Version: 4.56.5
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
@@ -133,9 +133,11 @@ Requires-Dist: coverage>=7.16.2; python_version == "3.10" and extra == "coverage
133
133
  Requires-Dist: coverage>=7.17.0; python_version >= "3.11" and extra == "coverage"
134
134
  Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
135
135
  Provides-Extra: flake8
136
- Requires-Dist: flake8==7.4.1; extra == "flake8"
136
+ Requires-Dist: flake8==7.4.1; python_version == "3.10" and extra == "flake8"
137
+ Requires-Dist: flake8==7.5.0; python_version >= "3.11" and extra == "flake8"
137
138
  Requires-Dist: mccabe==0.7.0; extra == "flake8"
138
- Requires-Dist: pyflakes==4.0.3; extra == "flake8"
139
+ Requires-Dist: pyflakes==4.0.3; python_version == "3.10" and extra == "flake8"
140
+ Requires-Dist: pyflakes==4.1.0; python_version >= "3.11" and extra == "flake8"
139
141
  Requires-Dist: pycodestyle==2.15.0; extra == "flake8"
140
142
  Provides-Extra: mcp
141
143
  Requires-Dist: mcp[cli]<3.0.0,>=2.3.0; extra == "mcp"
@@ -162,7 +164,7 @@ Requires-Dist: pyee>=14.0.0; python_version >= "3.12" and extra == "playwright"
162
164
  Provides-Extra: pyautogui
163
165
  Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
164
166
  Provides-Extra: uv
165
- Requires-Dist: uv>=0.13.5; extra == "uv"
167
+ Requires-Dist: uv>=0.13.6; extra == "uv"
166
168
  Dynamic: author
167
169
  Dynamic: author-email
168
170
  Dynamic: classifier
@@ -194,7 +196,7 @@ Dynamic: summary
194
196
  <p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
195
197
 
196
198
  <p align="center">
197
- <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_catalog-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 />
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 />
198
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>
199
201
  </p>
200
202
 
@@ -245,20 +247,30 @@ Dynamic: summary
245
247
 
246
248
  --------
247
249
 
248
- 📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py">an example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br /><em>(It bypasses both BrowserScan AND Sannysoft Bot-Detection)</em>
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>
249
251
 
250
252
  ```python
251
253
  from seleniumbase import sb_cdp
252
254
 
253
- sb = sb_cdp.Chrome()
255
+ sb = sb_cdp.Chrome() # Launch a stealth browser
254
256
  sb.goto("https://browserscan.net/bot-detection")
255
257
  sb.assert_element('strong:contains("Normal")')
256
258
  sb.sleep(1)
259
+
257
260
  sb.goto("https://bot.sannysoft.com/")
258
261
  sb.assert_element(".passed")
259
262
  sb.assert_element_not_visible(".failed")
260
263
  sb.sleep(1)
261
- sb.quit()
264
+
265
+ sb.goto("https://www.planetminecraft.com/account")
266
+ sb.type('[name="email"]', "Name123")
267
+ sb.type('[name="password"]', "Pass")
268
+ sb.click("input#autologin")
269
+ sb.solve_captcha() # Works on different CAPTCHAs
270
+ sb.assert_element('input[name="login"]')
271
+ sb.assert_element_not_visible("input[disabled]")
272
+ sb.sleep(1)
273
+ sb.quit() # Quit browser before end-of-program
262
274
  ```
263
275
 
264
276
  <p align="center">
@@ -271,37 +283,16 @@ sb.quit()
271
283
  <br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
272
284
  </p>
273
285
 
274
- --------
275
-
276
- 📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py">another example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br />(It performs various browser actions and bypasses a Cloudflare Turnstile)
277
-
278
- ```python
279
- from seleniumbase import sb_cdp
280
-
281
- sb = sb_cdp.Chrome(incognito=True)
282
- sb.goto("https://www.planetminecraft.com/account")
283
- sb.assert_element('input[name="login"]')
284
- sb.type('input[name="email"]', "test@example.com")
285
- sb.type('input[name="password"]', "Fake_Password")
286
- sb.click("input#autologin") # The checkbox
287
- if sb.is_element_visible("input[disabled]"):
288
- sb.solve_captcha() # Enables the input
289
- sb.assert_element_absent("input[disabled]")
290
- sb.sleep(1.5)
291
- sb.quit()
292
- ```
293
-
294
- ```
295
- python raw_cdp_planetmc.py
296
- ```
297
-
298
- <p align="left">
286
+ <p align="center">
299
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>
300
289
  </p>
301
290
 
291
+ --------
292
+
302
293
  ✅ <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.)
303
294
 
304
- ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition to occur.
295
+ ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition.<br />(Raises an exception if the condition isn't met in time.)
305
296
 
306
297
  --------
307
298
 
@@ -814,7 +805,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
814
805
  self.type("input", "dogs\n") # (The "\n" presses ENTER)
815
806
  ```
816
807
 
817
- Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
808
+ Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/latest/gherkin/" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
818
809
 
819
810
  ```zsh
820
811
  pytest coffee_cart_tests.py --rs
@@ -976,10 +967,15 @@ pytest test_coffee_cart.py --trace
976
967
  --sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
977
968
  --wfa # (Wait for AngularJS to be done loading after specific web actions.)
978
969
  --pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
979
- --headless # (The default headless mode. Linux uses this mode by default.)
980
- --headless1 # (Use Chrome's old headless mode. Fast, but has limitations.)
981
- --headless2 # (Use Chrome's new headless mode, which supports extensions.)
970
+ --headless # (Use headless mode. Linux uses this mode by default.)
971
+ --chs # (Use Chrome-Headless-Shell, a limited Chrome without stealth.)
982
972
  --headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
973
+ --incognito # (Enable Chrome's Incognito mode.)
974
+ --guest # (Enable Chrome's Guest mode.)
975
+ --uc # (Use undetected-chromedriver to evade bot-detection.)
976
+ --uc-cdp-events # (Capture CDP events in UC Mode. NOT related to CDP Mode.)
977
+ --log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
978
+ --remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
983
979
  --xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
984
980
  --xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
985
981
  --locale=LOCALE_CODE # (Set the Language Locale Code for the web browser.)
@@ -1013,17 +1009,11 @@ pytest test_coffee_cart.py --trace
1013
1009
  --disable-ws # (Disable Web Security on Chromium-based browsers.)
1014
1010
  --enable-ws # (Enable Web Security on Chromium-based browsers.)
1015
1011
  --enable-sync # (Enable "Chrome Sync" on websites.)
1016
- --uc | --undetected # (Use undetected-chromedriver to evade bot-detection.)
1017
- --uc-cdp-events # (Capture CDP events when running in "--undetected" mode.)
1018
- --log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
1019
- --remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
1020
1012
  --ftrace | --final-trace # (Debug Mode after each test. Don't use with CI!)
1021
1013
  --dashboard # (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
1022
1014
  --dash-title=STRING # (Set the title shown for the generated dashboard.)
1023
1015
  --enable-3d-apis # (Enables WebGL and 3D APIs.)
1024
1016
  --swiftshader # (Chrome "--use-gl=angle" / "--use-angle=swiftshader-webgl")
1025
- --incognito # (Enable Chrome's Incognito mode.)
1026
- --guest # (Enable Chrome's Guest mode.)
1027
1017
  --dark # (Enable Chrome's Dark mode.)
1028
1018
  --devtools # (Open Chrome's DevTools when the browser opens.)
1029
1019
  --rs | --reuse-session # (Reuse browser session for all tests.)
@@ -1592,21 +1582,13 @@ self.activate_jquery()
1592
1582
 
1593
1583
  ```python
1594
1584
  self.execute_script("jQuery, window.scrollTo(0, 600)") # Scrolling the page
1595
-
1596
1585
  self.execute_script("jQuery('#annoying-widget').hide()") # Hiding elements on a page
1597
-
1598
1586
  self.execute_script("jQuery('#hidden-widget').show(0)") # Showing hidden elements on a page
1599
-
1600
1587
  self.execute_script("jQuery('#annoying-button a').remove()") # Removing elements on a page
1601
-
1602
1588
  self.execute_script("jQuery('%s').mouseover()" % (mouse_over_item)) # Mouse-over elements on a page
1603
-
1604
1589
  self.execute_script("jQuery('input#the_id').val('my_text')") # Fast text input on a page
1605
-
1606
1590
  self.execute_script("jQuery('div#dropdown a.link').click()") # Click elements on a page
1607
-
1608
1591
  self.execute_script("return jQuery('div#amazing')[0].text") # Returns the css "text" of the element given
1609
-
1610
1592
  self.execute_script("return jQuery('textarea')[2].value") # Returns the css "value" of the 3rd textarea element on the page
1611
1593
  ```
1612
1594
 
@@ -15,7 +15,7 @@
15
15
  <p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
16
16
 
17
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_catalog-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 />
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
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
20
  </p>
21
21
 
@@ -66,20 +66,30 @@
66
66
 
67
67
  --------
68
68
 
69
- 📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py">an example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br /><em>(It bypasses both BrowserScan AND Sannysoft Bot-Detection)</em>
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>
70
70
 
71
71
  ```python
72
72
  from seleniumbase import sb_cdp
73
73
 
74
- sb = sb_cdp.Chrome()
74
+ sb = sb_cdp.Chrome() # Launch a stealth browser
75
75
  sb.goto("https://browserscan.net/bot-detection")
76
76
  sb.assert_element('strong:contains("Normal")')
77
77
  sb.sleep(1)
78
+
78
79
  sb.goto("https://bot.sannysoft.com/")
79
80
  sb.assert_element(".passed")
80
81
  sb.assert_element_not_visible(".failed")
81
82
  sb.sleep(1)
82
- sb.quit()
83
+
84
+ sb.goto("https://www.planetminecraft.com/account")
85
+ sb.type('[name="email"]', "Name123")
86
+ sb.type('[name="password"]', "Pass")
87
+ sb.click("input#autologin")
88
+ sb.solve_captcha() # Works on different CAPTCHAs
89
+ sb.assert_element('input[name="login"]')
90
+ sb.assert_element_not_visible("input[disabled]")
91
+ sb.sleep(1)
92
+ sb.quit() # Quit browser before end-of-program
83
93
  ```
84
94
 
85
95
  <p align="center">
@@ -92,37 +102,16 @@ sb.quit()
92
102
  <br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
93
103
  </p>
94
104
 
95
- --------
96
-
97
- 📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py">another example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br />(It performs various browser actions and bypasses a Cloudflare Turnstile)
98
-
99
- ```python
100
- from seleniumbase import sb_cdp
101
-
102
- sb = sb_cdp.Chrome(incognito=True)
103
- sb.goto("https://www.planetminecraft.com/account")
104
- sb.assert_element('input[name="login"]')
105
- sb.type('input[name="email"]', "test@example.com")
106
- sb.type('input[name="password"]', "Fake_Password")
107
- sb.click("input#autologin") # The checkbox
108
- if sb.is_element_visible("input[disabled]"):
109
- sb.solve_captcha() # Enables the input
110
- sb.assert_element_absent("input[disabled]")
111
- sb.sleep(1.5)
112
- sb.quit()
113
- ```
114
-
115
- ```
116
- python raw_cdp_planetmc.py
117
- ```
118
-
119
- <p align="left">
105
+ <p align="center">
120
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>
121
108
  </p>
122
109
 
110
+ --------
111
+
123
112
  ✅ <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.)
124
113
 
125
- ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition to occur.
114
+ ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition.<br />(Raises an exception if the condition isn't met in time.)
126
115
 
127
116
  --------
128
117
 
@@ -635,7 +624,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
635
624
  self.type("input", "dogs\n") # (The "\n" presses ENTER)
636
625
  ```
637
626
 
638
- Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
627
+ Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/latest/gherkin/" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
639
628
 
640
629
  ```zsh
641
630
  pytest coffee_cart_tests.py --rs
@@ -797,10 +786,15 @@ pytest test_coffee_cart.py --trace
797
786
  --sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
798
787
  --wfa # (Wait for AngularJS to be done loading after specific web actions.)
799
788
  --pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
800
- --headless # (The default headless mode. Linux uses this mode by default.)
801
- --headless1 # (Use Chrome's old headless mode. Fast, but has limitations.)
802
- --headless2 # (Use Chrome's new headless mode, which supports extensions.)
789
+ --headless # (Use headless mode. Linux uses this mode by default.)
790
+ --chs # (Use Chrome-Headless-Shell, a limited Chrome without stealth.)
803
791
  --headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
792
+ --incognito # (Enable Chrome's Incognito mode.)
793
+ --guest # (Enable Chrome's Guest mode.)
794
+ --uc # (Use undetected-chromedriver to evade bot-detection.)
795
+ --uc-cdp-events # (Capture CDP events in UC Mode. NOT related to CDP Mode.)
796
+ --log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
797
+ --remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
804
798
  --xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
805
799
  --xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
806
800
  --locale=LOCALE_CODE # (Set the Language Locale Code for the web browser.)
@@ -834,17 +828,11 @@ pytest test_coffee_cart.py --trace
834
828
  --disable-ws # (Disable Web Security on Chromium-based browsers.)
835
829
  --enable-ws # (Enable Web Security on Chromium-based browsers.)
836
830
  --enable-sync # (Enable "Chrome Sync" on websites.)
837
- --uc | --undetected # (Use undetected-chromedriver to evade bot-detection.)
838
- --uc-cdp-events # (Capture CDP events when running in "--undetected" mode.)
839
- --log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
840
- --remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
841
831
  --ftrace | --final-trace # (Debug Mode after each test. Don't use with CI!)
842
832
  --dashboard # (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
843
833
  --dash-title=STRING # (Set the title shown for the generated dashboard.)
844
834
  --enable-3d-apis # (Enables WebGL and 3D APIs.)
845
835
  --swiftshader # (Chrome "--use-gl=angle" / "--use-angle=swiftshader-webgl")
846
- --incognito # (Enable Chrome's Incognito mode.)
847
- --guest # (Enable Chrome's Guest mode.)
848
836
  --dark # (Enable Chrome's Dark mode.)
849
837
  --devtools # (Open Chrome's DevTools when the browser opens.)
850
838
  --rs | --reuse-session # (Reuse browser session for all tests.)
@@ -1413,21 +1401,13 @@ self.activate_jquery()
1413
1401
 
1414
1402
  ```python
1415
1403
  self.execute_script("jQuery, window.scrollTo(0, 600)") # Scrolling the page
1416
-
1417
1404
  self.execute_script("jQuery('#annoying-widget').hide()") # Hiding elements on a page
1418
-
1419
1405
  self.execute_script("jQuery('#hidden-widget').show(0)") # Showing hidden elements on a page
1420
-
1421
1406
  self.execute_script("jQuery('#annoying-button a').remove()") # Removing elements on a page
1422
-
1423
1407
  self.execute_script("jQuery('%s').mouseover()" % (mouse_over_item)) # Mouse-over elements on a page
1424
-
1425
1408
  self.execute_script("jQuery('input#the_id').val('my_text')") # Fast text input on a page
1426
-
1427
1409
  self.execute_script("jQuery('div#dropdown a.link').click()") # Click elements on a page
1428
-
1429
1410
  self.execute_script("return jQuery('div#amazing')[0].text") # Returns the css "text" of the element given
1430
-
1431
1411
  self.execute_script("return jQuery('textarea')[2].value") # Returns the css "value" of the 3rd textarea element on the page
1432
1412
  ```
1433
1413
 
@@ -71,7 +71,9 @@ rich>=15.0.0,<16
71
71
  coverage>=7.16.2;python_version=="3.10"
72
72
  coverage>=7.17.0;python_version>="3.11"
73
73
  pytest-cov>=7.1.0
74
- flake8==7.4.1
74
+ flake8==7.4.1;python_version=="3.10"
75
+ flake8==7.5.0;python_version>="3.11"
75
76
  mccabe==0.7.0
76
- pyflakes==4.0.3
77
+ pyflakes==4.0.3;python_version=="3.10"
78
+ pyflakes==4.1.0;python_version>="3.11"
77
79
  pycodestyle==2.15.0
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.56.4"
2
+ __version__ = "4.56.5"
@@ -7632,7 +7632,7 @@ class BaseCase(unittest.TestCase):
7632
7632
  link,
7633
7633
  allow_redirects=False,
7634
7634
  timeout=5,
7635
- verify=False,
7635
+ verify=True,
7636
7636
  ):
7637
7637
  """Get the status code of a link.
7638
7638
  If the timeout is set to less than 1, it becomes 1.
@@ -260,7 +260,7 @@ def _get_link_status_code(
260
260
  link,
261
261
  allow_redirects=False,
262
262
  timeout=5,
263
- verify=False,
263
+ verify=True,
264
264
  ):
265
265
  """Get the status code of a link.
266
266
  If the timeout is exceeded, will return a 404.
@@ -1268,7 +1268,8 @@ class Element:
1268
1268
  await self.tab.send(cdp.dom.disable())
1269
1269
  await self.tab.send(cdp.overlay.disable())
1270
1270
  return
1271
- await self.tab.send(cdp.dom.enable())
1271
+ with suppress(Exception):
1272
+ await self.tab.send(cdp.dom.enable())
1272
1273
  await self.tab.send(cdp.overlay.enable())
1273
1274
  conf = cdp.overlay.HighlightConfig(
1274
1275
  show_info=True, show_extension_lines=True, show_styles=True
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.56.4
3
+ Version: 4.56.5
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
@@ -133,9 +133,11 @@ Requires-Dist: coverage>=7.16.2; python_version == "3.10" and extra == "coverage
133
133
  Requires-Dist: coverage>=7.17.0; python_version >= "3.11" and extra == "coverage"
134
134
  Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
135
135
  Provides-Extra: flake8
136
- Requires-Dist: flake8==7.4.1; extra == "flake8"
136
+ Requires-Dist: flake8==7.4.1; python_version == "3.10" and extra == "flake8"
137
+ Requires-Dist: flake8==7.5.0; python_version >= "3.11" and extra == "flake8"
137
138
  Requires-Dist: mccabe==0.7.0; extra == "flake8"
138
- Requires-Dist: pyflakes==4.0.3; extra == "flake8"
139
+ Requires-Dist: pyflakes==4.0.3; python_version == "3.10" and extra == "flake8"
140
+ Requires-Dist: pyflakes==4.1.0; python_version >= "3.11" and extra == "flake8"
139
141
  Requires-Dist: pycodestyle==2.15.0; extra == "flake8"
140
142
  Provides-Extra: mcp
141
143
  Requires-Dist: mcp[cli]<3.0.0,>=2.3.0; extra == "mcp"
@@ -162,7 +164,7 @@ Requires-Dist: pyee>=14.0.0; python_version >= "3.12" and extra == "playwright"
162
164
  Provides-Extra: pyautogui
163
165
  Requires-Dist: PyAutoGUI>=0.9.54; platform_system != "Linux" and extra == "pyautogui"
164
166
  Provides-Extra: uv
165
- Requires-Dist: uv>=0.13.5; extra == "uv"
167
+ Requires-Dist: uv>=0.13.6; extra == "uv"
166
168
  Dynamic: author
167
169
  Dynamic: author-email
168
170
  Dynamic: classifier
@@ -194,7 +196,7 @@ Dynamic: summary
194
196
  <p align="center"><b align="center">Includes stealth options for bypassing bot-detection and CAPTCHAs.<br /></b></p>
195
197
 
196
198
  <p align="center">
197
- <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_catalog-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 />
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 />
198
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>
199
201
  </p>
200
202
 
@@ -245,20 +247,30 @@ Dynamic: summary
245
247
 
246
248
  --------
247
249
 
248
- 📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_cdp_mode.py">an example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br /><em>(It bypasses both BrowserScan AND Sannysoft Bot-Detection)</em>
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>
249
251
 
250
252
  ```python
251
253
  from seleniumbase import sb_cdp
252
254
 
253
- sb = sb_cdp.Chrome()
255
+ sb = sb_cdp.Chrome() # Launch a stealth browser
254
256
  sb.goto("https://browserscan.net/bot-detection")
255
257
  sb.assert_element('strong:contains("Normal")')
256
258
  sb.sleep(1)
259
+
257
260
  sb.goto("https://bot.sannysoft.com/")
258
261
  sb.assert_element(".passed")
259
262
  sb.assert_element_not_visible(".failed")
260
263
  sb.sleep(1)
261
- sb.quit()
264
+
265
+ sb.goto("https://www.planetminecraft.com/account")
266
+ sb.type('[name="email"]', "Name123")
267
+ sb.type('[name="password"]', "Pass")
268
+ sb.click("input#autologin")
269
+ sb.solve_captcha() # Works on different CAPTCHAs
270
+ sb.assert_element('input[name="login"]')
271
+ sb.assert_element_not_visible("input[disabled]")
272
+ sb.sleep(1)
273
+ sb.quit() # Quit browser before end-of-program
262
274
  ```
263
275
 
264
276
  <p align="center">
@@ -271,37 +283,16 @@ sb.quit()
271
283
  <br /><em>(All Sannysoft bot-detection tests passed successfully)</em>
272
284
  </p>
273
285
 
274
- --------
275
-
276
- 📝 Here's <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_planetmc.py">another example</a> with <b><code translate="no">seleniumbase</code></b> <b><code translate="no">sb_cdp</code></b> (<a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/ReadMe.md#-pure-cdp-mode-sb_cdp"><i>Pure CDP Mode</i></a>):<br />(It performs various browser actions and bypasses a Cloudflare Turnstile)
277
-
278
- ```python
279
- from seleniumbase import sb_cdp
280
-
281
- sb = sb_cdp.Chrome(incognito=True)
282
- sb.goto("https://www.planetminecraft.com/account")
283
- sb.assert_element('input[name="login"]')
284
- sb.type('input[name="email"]', "test@example.com")
285
- sb.type('input[name="password"]', "Fake_Password")
286
- sb.click("input#autologin") # The checkbox
287
- if sb.is_element_visible("input[disabled]"):
288
- sb.solve_captcha() # Enables the input
289
- sb.assert_element_absent("input[disabled]")
290
- sb.sleep(1.5)
291
- sb.quit()
292
- ```
293
-
294
- ```
295
- python raw_cdp_planetmc.py
296
- ```
297
-
298
- <p align="left">
286
+ <p align="center">
299
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>
300
289
  </p>
301
290
 
291
+ --------
292
+
302
293
  ✅ <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.)
303
294
 
304
- ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition to occur.
295
+ ℹ️ <code>sb.assert_*</code> methods wait up to 7 seconds for the expected condition.<br />(Raises an exception if the condition isn't met in time.)
305
296
 
306
297
  --------
307
298
 
@@ -814,7 +805,7 @@ self.assert_no_js_errors() # Verify there are no JS errors.
814
805
  self.type("input", "dogs\n") # (The "\n" presses ENTER)
815
806
  ```
816
807
 
817
- Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/stable/gherkin.html#features" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
808
+ Most SeleniumBase scripts can be run with <code translate="no">pytest</code>, <code translate="no">pynose</code>, or pure <code translate="no">python</code>. Not all test runners can run all test formats. For example, tests that use the `sb` pytest fixture can only be run with `pytest`. (See <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/help_docs/syntax_formats.md">Syntax Formats</a>) There's also a <a href="https://behave.readthedocs.io/en/latest/gherkin/" target="_blank" rel="noopener">Gherkin</a> test format that runs with <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/behave_bdd/ReadMe.md">behave</a>.
818
809
 
819
810
  ```zsh
820
811
  pytest coffee_cart_tests.py --rs
@@ -976,10 +967,15 @@ pytest test_coffee_cart.py --trace
976
967
  --sjw # (Skip JS Waits for readyState to be "complete" or Angular to load.)
977
968
  --wfa # (Wait for AngularJS to be done loading after specific web actions.)
978
969
  --pls=PLS # (Set pageLoadStrategy on Chrome: "normal", "eager", or "none".)
979
- --headless # (The default headless mode. Linux uses this mode by default.)
980
- --headless1 # (Use Chrome's old headless mode. Fast, but has limitations.)
981
- --headless2 # (Use Chrome's new headless mode, which supports extensions.)
970
+ --headless # (Use headless mode. Linux uses this mode by default.)
971
+ --chs # (Use Chrome-Headless-Shell, a limited Chrome without stealth.)
982
972
  --headed # (Run tests in headed/GUI mode on Linux OS, where not default.)
973
+ --incognito # (Enable Chrome's Incognito mode.)
974
+ --guest # (Enable Chrome's Guest mode.)
975
+ --uc # (Use undetected-chromedriver to evade bot-detection.)
976
+ --uc-cdp-events # (Capture CDP events in UC Mode. NOT related to CDP Mode.)
977
+ --log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
978
+ --remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
983
979
  --xvfb # (Run tests using the Xvfb virtual display server on Linux OS.)
984
980
  --xvfb-metrics=STRING # (Set Xvfb display size on Linux: "Width,Height".)
985
981
  --locale=LOCALE_CODE # (Set the Language Locale Code for the web browser.)
@@ -1013,17 +1009,11 @@ pytest test_coffee_cart.py --trace
1013
1009
  --disable-ws # (Disable Web Security on Chromium-based browsers.)
1014
1010
  --enable-ws # (Enable Web Security on Chromium-based browsers.)
1015
1011
  --enable-sync # (Enable "Chrome Sync" on websites.)
1016
- --uc | --undetected # (Use undetected-chromedriver to evade bot-detection.)
1017
- --uc-cdp-events # (Capture CDP events when running in "--undetected" mode.)
1018
- --log-cdp # ("goog:loggingPrefs", {"performance": "ALL", "browser": "ALL"})
1019
- --remote-debug # (Sync to Chrome Remote Debugger chrome://inspect/#devices)
1020
1012
  --ftrace | --final-trace # (Debug Mode after each test. Don't use with CI!)
1021
1013
  --dashboard # (Enable the SeleniumBase Dashboard. Saved at: dashboard.html)
1022
1014
  --dash-title=STRING # (Set the title shown for the generated dashboard.)
1023
1015
  --enable-3d-apis # (Enables WebGL and 3D APIs.)
1024
1016
  --swiftshader # (Chrome "--use-gl=angle" / "--use-angle=swiftshader-webgl")
1025
- --incognito # (Enable Chrome's Incognito mode.)
1026
- --guest # (Enable Chrome's Guest mode.)
1027
1017
  --dark # (Enable Chrome's Dark mode.)
1028
1018
  --devtools # (Open Chrome's DevTools when the browser opens.)
1029
1019
  --rs | --reuse-session # (Reuse browser session for all tests.)
@@ -1592,21 +1582,13 @@ self.activate_jquery()
1592
1582
 
1593
1583
  ```python
1594
1584
  self.execute_script("jQuery, window.scrollTo(0, 600)") # Scrolling the page
1595
-
1596
1585
  self.execute_script("jQuery('#annoying-widget').hide()") # Hiding elements on a page
1597
-
1598
1586
  self.execute_script("jQuery('#hidden-widget').show(0)") # Showing hidden elements on a page
1599
-
1600
1587
  self.execute_script("jQuery('#annoying-button a').remove()") # Removing elements on a page
1601
-
1602
1588
  self.execute_script("jQuery('%s').mouseover()" % (mouse_over_item)) # Mouse-over elements on a page
1603
-
1604
1589
  self.execute_script("jQuery('input#the_id').val('my_text')") # Fast text input on a page
1605
-
1606
1590
  self.execute_script("jQuery('div#dropdown a.link').click()") # Click elements on a page
1607
-
1608
1591
  self.execute_script("return jQuery('div#amazing')[0].text") # Returns the css "text" of the element given
1609
-
1610
1592
  self.execute_script("return jQuery('textarea')[2].value") # Returns the css "value" of the 3rd textarea element on the page
1611
1593
  ```
1612
1594