seleniumbase 4.41.1__tar.gz → 4.41.3__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 (157) hide show
  1. {seleniumbase-4.41.1/seleniumbase.egg-info → seleniumbase-4.41.3}/PKG-INFO +8 -6
  2. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/requirements.txt +7 -5
  3. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/browser_launcher.py +7 -2
  5. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/sb_cdp.py +146 -0
  6. {seleniumbase-4.41.1 → seleniumbase-4.41.3/seleniumbase.egg-info}/PKG-INFO +8 -6
  7. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase.egg-info/requires.txt +7 -5
  8. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/setup.py +7 -5
  9. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/.gitignore +0 -0
  10. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/LICENSE +0 -0
  11. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/MANIFEST.in +0 -0
  12. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/README.md +0 -0
  13. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/install.sh +0 -0
  14. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/pyproject.toml +0 -0
  15. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/pytest.ini +0 -0
  16. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/sbase/__init__.py +0 -0
  17. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/sbase/__main__.py +0 -0
  18. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/sbase/steps.py +0 -0
  19. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/__init__.py +0 -0
  20. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/__main__.py +0 -0
  21. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/behave/__init__.py +0 -0
  22. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/behave/behave_helper.py +0 -0
  23. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/behave/behave_sb.py +0 -0
  24. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/behave/steps.py +0 -0
  25. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/common/__init__.py +0 -0
  26. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/common/decorators.py +0 -0
  27. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/common/encryption.py +0 -0
  28. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/common/exceptions.py +0 -0
  29. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/common/obfuscate.py +0 -0
  30. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/common/unobfuscate.py +0 -0
  31. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/config/__init__.py +0 -0
  32. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/config/ad_block_list.py +0 -0
  33. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/config/proxy_list.py +0 -0
  34. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/config/settings.py +0 -0
  35. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/__init__.py +0 -0
  36. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/logo_helper.py +0 -0
  37. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/rich_helper.py +0 -0
  38. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/run.py +0 -0
  39. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  40. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  41. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_commander.py +0 -0
  42. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_install.py +0 -0
  43. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  44. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  45. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  46. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  47. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  48. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  49. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_print.py +0 -0
  50. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  51. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/__init__.py +0 -0
  52. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/application_manager.py +0 -0
  53. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/capabilities_parser.py +0 -0
  54. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/colored_traceback.py +0 -0
  55. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/create_db_tables.sql +0 -0
  56. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/detect_b_ver.py +0 -0
  57. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/download_helper.py +0 -0
  58. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/encoded_images.py +0 -0
  59. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/jqc_helper.py +0 -0
  60. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/log_helper.py +0 -0
  61. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/mysql.py +0 -0
  62. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/proxy_helper.py +0 -0
  63. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/recorder_helper.py +0 -0
  64. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/report_helper.py +0 -0
  65. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/s3_manager.py +0 -0
  66. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/sb_driver.py +0 -0
  67. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/session_helper.py +0 -0
  68. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/settings_parser.py +0 -0
  69. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/style_sheet.py +0 -0
  70. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/testcase_manager.py +0 -0
  71. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/tour_helper.py +0 -0
  72. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/core/visual_helper.py +0 -0
  73. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/drivers/__init__.py +0 -0
  74. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  75. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  76. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/extensions/__init__.py +0 -0
  77. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/extensions/ad_block.zip +0 -0
  78. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/extensions/disable_csp.zip +0 -0
  79. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/extensions/recorder.zip +0 -0
  80. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/extensions/sbase_ext.zip +0 -0
  81. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/__init__.py +0 -0
  82. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/base_case.py +0 -0
  83. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/constants.py +0 -0
  84. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  85. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/errors.py +0 -0
  86. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/js_utils.py +0 -0
  87. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/page_actions.py +0 -0
  88. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/page_utils.py +0 -0
  89. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/shared_utils.py +0 -0
  90. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/unittest_helper.py +0 -0
  91. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/words.py +0 -0
  92. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  93. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/js_code/__init__.py +0 -0
  94. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/js_code/active_css_js.py +0 -0
  95. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/js_code/live_js.py +0 -0
  96. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/js_code/recorder_js.py +0 -0
  97. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/masterqa/__init__.py +0 -0
  98. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/masterqa/master_qa.py +0 -0
  99. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/__init__.py +0 -0
  100. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/base_plugin.py +0 -0
  101. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/basic_test_info.py +0 -0
  102. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  103. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/driver_manager.py +0 -0
  104. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/page_source.py +0 -0
  105. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/pytest_plugin.py +0 -0
  106. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  107. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/sb_manager.py +0 -0
  108. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/screen_shots.py +0 -0
  109. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/plugins/selenium_plugin.py +0 -0
  110. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/resources/__init__.py +0 -0
  111. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/__init__.py +0 -0
  112. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/chinese.py +0 -0
  113. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/dutch.py +0 -0
  114. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/french.py +0 -0
  115. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/italian.py +0 -0
  116. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/japanese.py +0 -0
  117. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/korean.py +0 -0
  118. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/master_dict.py +0 -0
  119. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/portuguese.py +0 -0
  120. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/russian.py +0 -0
  121. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/spanish.py +0 -0
  122. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/translate/translator.py +0 -0
  123. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/__init__.py +0 -0
  124. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp.py +0 -0
  125. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  126. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  127. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  128. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
  129. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/config.py +0 -0
  130. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
  131. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  132. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  133. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/dprocess.py +0 -0
  134. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/options.py +0 -0
  135. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/patcher.py +0 -0
  136. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/reactor.py +0 -0
  137. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/undetected/webelement.py +0 -0
  138. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/__init__.py +0 -0
  139. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  140. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  141. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  142. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  143. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  144. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  145. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  146. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  147. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  148. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  149. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  150. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  151. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  152. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase.egg-info/SOURCES.txt +0 -0
  153. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase.egg-info/dependency_links.txt +0 -0
  154. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase.egg-info/entry_points.txt +0 -0
  155. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/seleniumbase.egg-info/top_level.txt +0 -0
  156. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/setup.cfg +0 -0
  157. {seleniumbase-4.41.1 → seleniumbase-4.41.3}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.41.1
3
+ Version: 4.41.3
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -77,7 +77,7 @@ Requires-Dist: fasteners>=0.20
77
77
  Requires-Dist: mycdp>=1.2.0
78
78
  Requires-Dist: pynose>=1.5.4
79
79
  Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
80
- Requires-Dist: platformdirs>=4.3.8; python_version >= "3.9"
80
+ Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
81
81
  Requires-Dist: typing-extensions>=4.13.2
82
82
  Requires-Dist: sbvirtualdisplay>=1.4.0
83
83
  Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
@@ -97,7 +97,8 @@ Requires-Dist: chardet==5.2.0
97
97
  Requires-Dist: charset-normalizer<4,>=3.4.3
98
98
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
99
99
  Requires-Dist: urllib3<2.6.0,>=1.26.20; python_version >= "3.10"
100
- Requires-Dist: requests==2.32.4
100
+ Requires-Dist: requests==2.32.4; python_version < "3.9"
101
+ Requires-Dist: requests<2.33,>=2.32.5; python_version >= "3.9"
101
102
  Requires-Dist: sniffio==1.3.1
102
103
  Requires-Dist: h11==0.16.0
103
104
  Requires-Dist: outcome==1.3.0.post0
@@ -127,8 +128,9 @@ Requires-Dist: pytest-xdist==3.6.1; python_version < "3.9"
127
128
  Requires-Dist: pytest-xdist==3.8.0; python_version >= "3.9"
128
129
  Requires-Dist: parameterized==0.9.0
129
130
  Requires-Dist: behave==1.2.6
130
- Requires-Dist: soupsieve==2.7
131
- Requires-Dist: beautifulsoup4==4.13.4
131
+ Requires-Dist: soupsieve==2.7; python_version < "3.9"
132
+ Requires-Dist: soupsieve~=2.8; python_version >= "3.9"
133
+ Requires-Dist: beautifulsoup4~=4.13.5
132
134
  Requires-Dist: pyotp==2.9.0
133
135
  Requires-Dist: python-xlib==0.33; platform_system == "Linux"
134
136
  Requires-Dist: markdown-it-py==3.0.0; python_version < "3.10"
@@ -141,7 +143,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
141
143
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
142
144
  Provides-Extra: coverage
143
145
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
144
- Requires-Dist: coverage>=7.10.4; python_version >= "3.9" and extra == "coverage"
146
+ Requires-Dist: coverage>=7.10.5; python_version >= "3.9" and extra == "coverage"
145
147
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
146
148
  Requires-Dist: pytest-cov>=6.2.1; python_version >= "3.9" and extra == "coverage"
147
149
  Provides-Extra: flake8
@@ -15,7 +15,7 @@ fasteners>=0.20
15
15
  mycdp>=1.2.0
16
16
  pynose>=1.5.4
17
17
  platformdirs>=4.3.6;python_version<"3.9"
18
- platformdirs>=4.3.8;python_version>="3.9"
18
+ platformdirs>=4.4.0;python_version>="3.9"
19
19
  typing-extensions>=4.13.2
20
20
  sbvirtualdisplay>=1.4.0
21
21
  MarkupSafe==2.1.5;python_version<"3.9"
@@ -35,7 +35,8 @@ chardet==5.2.0
35
35
  charset-normalizer>=3.4.3,<4
36
36
  urllib3>=1.26.20,<2;python_version<"3.10"
37
37
  urllib3>=1.26.20,<2.6.0;python_version>="3.10"
38
- requests==2.32.4
38
+ requests==2.32.4;python_version<"3.9"
39
+ requests>=2.32.5,<2.33;python_version>="3.9"
39
40
  sniffio==1.3.1
40
41
  h11==0.16.0
41
42
  outcome==1.3.0.post0
@@ -65,8 +66,9 @@ pytest-xdist==3.6.1;python_version<"3.9"
65
66
  pytest-xdist==3.8.0;python_version>="3.9"
66
67
  parameterized==0.9.0
67
68
  behave==1.2.6
68
- soupsieve==2.7
69
- beautifulsoup4==4.13.4
69
+ soupsieve==2.7;python_version<"3.9"
70
+ soupsieve~=2.8;python_version>="3.9"
71
+ beautifulsoup4~=4.13.5
70
72
  pyotp==2.9.0
71
73
  python-xlib==0.33;platform_system=="Linux"
72
74
  markdown-it-py==3.0.0;python_version<"3.10"
@@ -78,7 +80,7 @@ rich>=14.1.0,<15
78
80
  # ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
79
81
 
80
82
  coverage>=7.6.1;python_version<"3.9"
81
- coverage>=7.10.4;python_version>="3.9"
83
+ coverage>=7.10.5;python_version>="3.9"
82
84
  pytest-cov>=5.0.0;python_version<"3.9"
83
85
  pytest-cov>=6.2.1;python_version>="3.9"
84
86
  flake8==5.0.4;python_version<"3.9"
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.41.1"
2
+ __version__ = "4.41.3"
@@ -762,6 +762,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
762
762
  cdp.gui_write = CDPM.gui_write
763
763
  cdp.gui_click_x_y = CDPM.gui_click_x_y
764
764
  cdp.gui_click_element = CDPM.gui_click_element
765
+ cdp.gui_click_captcha = CDPM.gui_click_captcha
765
766
  cdp.gui_drag_drop_points = CDPM.gui_drag_drop_points
766
767
  cdp.gui_drag_and_drop = CDPM.gui_drag_and_drop
767
768
  cdp.gui_click_and_hold = CDPM.gui_click_and_hold
@@ -3136,7 +3137,9 @@ def get_driver(
3136
3137
  proxy_string, proxy_scheme = proxy_helper.validate_proxy_string(
3137
3138
  proxy_string, keep_scheme=True
3138
3139
  )
3139
- if proxy_string and proxy_user and proxy_pass:
3140
+ if proxy_user and not proxy_pass:
3141
+ proxy_pass = ""
3142
+ if proxy_string and proxy_user:
3140
3143
  proxy_auth = True
3141
3144
  elif proxy_pac_url:
3142
3145
  username_and_password = None
@@ -3163,7 +3166,9 @@ def get_driver(
3163
3166
  )
3164
3167
  if not proxy_pac_url.lower().endswith(".pac"):
3165
3168
  raise Exception('The proxy PAC URL must end with ".pac"!')
3166
- if proxy_pac_url and proxy_user and proxy_pass:
3169
+ if proxy_user and not proxy_pass:
3170
+ proxy_pass = ""
3171
+ if proxy_pac_url and proxy_user:
3167
3172
  proxy_auth = True
3168
3173
  if (
3169
3174
  is_using_uc(undetectable, browser_name)
@@ -1629,6 +1629,152 @@ class CDPMethods():
1629
1629
  self.__slow_mode_pause_if_set()
1630
1630
  self.loop.run_until_complete(self.page.wait())
1631
1631
 
1632
+ def _on_a_cf_turnstile_page(self):
1633
+ source = self.get_page_source()
1634
+ if (
1635
+ 'data-callback="onCaptchaSuccess"' in source
1636
+ or "/challenge-platform/scripts/" in source
1637
+ or 'id="challenge-widget-' in source
1638
+ or "cf-turnstile-" in source
1639
+ ):
1640
+ return True
1641
+ return False
1642
+
1643
+ def gui_click_captcha(self):
1644
+ if not self._on_a_cf_turnstile_page():
1645
+ return
1646
+ selector = None
1647
+ if (
1648
+ self.is_element_present('[name*="cf-turnstile-"]')
1649
+ and self.is_element_present("#challenge-form div > div")
1650
+ ):
1651
+ selector = "#challenge-form div > div"
1652
+ elif (
1653
+ self.is_element_present('[name*="cf-turnstile-"]')
1654
+ and self.is_element_present(
1655
+ '[style="display: grid;"] div div'
1656
+ )
1657
+ ):
1658
+ selector = '[style="display: grid;"] div div'
1659
+ elif (
1660
+ self.is_element_present('[name*="cf-turnstile-"]')
1661
+ and self.is_element_present("[class*=spacer] + div div")
1662
+ ):
1663
+ selector = '[class*=spacer] + div div'
1664
+ elif (
1665
+ self.is_element_present('[name*="cf-turnstile-"]')
1666
+ and self.is_element_present("div.spacer div")
1667
+ ):
1668
+ selector = "div.spacer div"
1669
+ elif (
1670
+ self.is_element_present('script[src*="challenges.c"]')
1671
+ and self.is_element_present(
1672
+ '[data-testid*="challenge-"] div'
1673
+ )
1674
+ ):
1675
+ selector = '[data-testid*="challenge-"] div'
1676
+ elif self.is_element_present(
1677
+ "div#turnstile-widget div:not([class])"
1678
+ ):
1679
+ selector = "div#turnstile-widget div:not([class])"
1680
+ elif self.is_element_present(
1681
+ 'form div:not([class]):has(input[name*="cf-turn"])'
1682
+ ):
1683
+ selector = 'form div:not([class]):has(input[name*="cf-turn"])'
1684
+ elif (
1685
+ self.is_element_present('[src*="/turnstile/"]')
1686
+ and self.is_element_present("form div:not(:has(*))")
1687
+ ):
1688
+ selector = "form div:not(:has(*))"
1689
+ elif (
1690
+ self.is_element_present('[src*="/turnstile/"]')
1691
+ and self.is_element_present(
1692
+ "body > div#check > div:not([class])"
1693
+ )
1694
+ ):
1695
+ selector = "body > div#check > div:not([class])"
1696
+ elif self.is_element_present(".cf-turnstile-wrapper"):
1697
+ selector = ".cf-turnstile-wrapper"
1698
+ elif self.is_element_present('[class="cf-turnstile"]'):
1699
+ selector = '[class="cf-turnstile"]'
1700
+ elif self.is_element_present(
1701
+ '[data-callback="onCaptchaSuccess"]'
1702
+ ):
1703
+ selector = '[data-callback="onCaptchaSuccess"]'
1704
+ else:
1705
+ return
1706
+ if not selector:
1707
+ return
1708
+ if (
1709
+ self.is_element_present("form")
1710
+ and (
1711
+ self.is_element_present('form[class*="center"]')
1712
+ or self.is_element_present('form[class*="right"]')
1713
+ or self.is_element_present('form div[class*="center"]')
1714
+ or self.is_element_present('form div[class*="right"]')
1715
+ )
1716
+ ):
1717
+ script = (
1718
+ """var $elements = document.querySelectorAll(
1719
+ 'form[class], form div[class]');
1720
+ var index = 0, length = $elements.length;
1721
+ for(; index < length; index++){
1722
+ the_class = $elements[index].getAttribute('class');
1723
+ new_class = the_class.replaceAll('center', 'left');
1724
+ new_class = new_class.replaceAll('right', 'left');
1725
+ $elements[index].setAttribute('class', new_class);}"""
1726
+ )
1727
+ with suppress(Exception):
1728
+ self.loop.run_until_complete(self.page.evaluate(script))
1729
+ self.loop.run_until_complete(self.page.wait())
1730
+ elif (
1731
+ self.is_element_present("form")
1732
+ and (
1733
+ self.is_element_present('form div[style*="center"]')
1734
+ or self.is_element_present('form div[style*="right"]')
1735
+ )
1736
+ ):
1737
+ script = (
1738
+ """var $elements = document.querySelectorAll(
1739
+ 'form[style], form div[style]');
1740
+ var index = 0, length = $elements.length;
1741
+ for(; index < length; index++){
1742
+ the_style = $elements[index].getAttribute('style');
1743
+ new_style = the_style.replaceAll('center', 'left');
1744
+ new_style = new_style.replaceAll('right', 'left');
1745
+ $elements[index].setAttribute('style', new_style);}"""
1746
+ )
1747
+ with suppress(Exception):
1748
+ self.loop.run_until_complete(self.page.evaluate(script))
1749
+ self.loop.run_until_complete(self.page.wait())
1750
+ elif (
1751
+ self.is_element_present("form")
1752
+ and self.is_element_present(
1753
+ 'form [id*="turnstile"] > div:not([class])'
1754
+ )
1755
+ ):
1756
+ script = (
1757
+ """var $elements = document.querySelectorAll(
1758
+ 'form [id*="turnstile"]');
1759
+ var index = 0, length = $elements.length;
1760
+ for(; index < length; index++){
1761
+ $elements[index].setAttribute('align', 'left');}"""
1762
+ )
1763
+ with suppress(Exception):
1764
+ self.loop.run_until_complete(self.page.evaluate(script))
1765
+ self.loop.run_until_complete(self.page.wait())
1766
+ with suppress(Exception):
1767
+ element_rect = self.get_gui_element_rect(selector, timeout=1)
1768
+ e_x = element_rect["x"]
1769
+ e_y = element_rect["y"]
1770
+ x = e_x + 32
1771
+ if not shared_utils.is_windows():
1772
+ y = e_y + 32
1773
+ else:
1774
+ y = e_y + 22
1775
+ sb_config._saved_cf_x_y = (x, y)
1776
+ self.gui_click_x_y(x, y)
1777
+
1632
1778
  def __gui_drag_drop(self, x1, y1, x2, y2, timeframe=0.25, uc_lock=False):
1633
1779
  self.__install_pyautogui_if_missing()
1634
1780
  import pyautogui
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.41.1
3
+ Version: 4.41.3
4
4
  Summary: A complete web automation framework for end-to-end testing.
5
5
  Home-page: https://github.com/seleniumbase/SeleniumBase
6
6
  Author: Michael Mintz
@@ -77,7 +77,7 @@ Requires-Dist: fasteners>=0.20
77
77
  Requires-Dist: mycdp>=1.2.0
78
78
  Requires-Dist: pynose>=1.5.4
79
79
  Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
80
- Requires-Dist: platformdirs>=4.3.8; python_version >= "3.9"
80
+ Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
81
81
  Requires-Dist: typing-extensions>=4.13.2
82
82
  Requires-Dist: sbvirtualdisplay>=1.4.0
83
83
  Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
@@ -97,7 +97,8 @@ Requires-Dist: chardet==5.2.0
97
97
  Requires-Dist: charset-normalizer<4,>=3.4.3
98
98
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
99
99
  Requires-Dist: urllib3<2.6.0,>=1.26.20; python_version >= "3.10"
100
- Requires-Dist: requests==2.32.4
100
+ Requires-Dist: requests==2.32.4; python_version < "3.9"
101
+ Requires-Dist: requests<2.33,>=2.32.5; python_version >= "3.9"
101
102
  Requires-Dist: sniffio==1.3.1
102
103
  Requires-Dist: h11==0.16.0
103
104
  Requires-Dist: outcome==1.3.0.post0
@@ -127,8 +128,9 @@ Requires-Dist: pytest-xdist==3.6.1; python_version < "3.9"
127
128
  Requires-Dist: pytest-xdist==3.8.0; python_version >= "3.9"
128
129
  Requires-Dist: parameterized==0.9.0
129
130
  Requires-Dist: behave==1.2.6
130
- Requires-Dist: soupsieve==2.7
131
- Requires-Dist: beautifulsoup4==4.13.4
131
+ Requires-Dist: soupsieve==2.7; python_version < "3.9"
132
+ Requires-Dist: soupsieve~=2.8; python_version >= "3.9"
133
+ Requires-Dist: beautifulsoup4~=4.13.5
132
134
  Requires-Dist: pyotp==2.9.0
133
135
  Requires-Dist: python-xlib==0.33; platform_system == "Linux"
134
136
  Requires-Dist: markdown-it-py==3.0.0; python_version < "3.10"
@@ -141,7 +143,7 @@ Requires-Dist: allure-python-commons>=2.13.5; extra == "allure"
141
143
  Requires-Dist: allure-behave>=2.13.5; extra == "allure"
142
144
  Provides-Extra: coverage
143
145
  Requires-Dist: coverage>=7.6.1; python_version < "3.9" and extra == "coverage"
144
- Requires-Dist: coverage>=7.10.4; python_version >= "3.9" and extra == "coverage"
146
+ Requires-Dist: coverage>=7.10.5; python_version >= "3.9" and extra == "coverage"
145
147
  Requires-Dist: pytest-cov>=5.0.0; python_version < "3.9" and extra == "coverage"
146
148
  Requires-Dist: pytest-cov>=6.2.1; python_version >= "3.9" and extra == "coverage"
147
149
  Provides-Extra: flake8
@@ -20,7 +20,6 @@ pdbp>=1.7.1
20
20
  idna==3.10
21
21
  chardet==5.2.0
22
22
  charset-normalizer<4,>=3.4.3
23
- requests==2.32.4
24
23
  sniffio==1.3.1
25
24
  h11==0.16.0
26
25
  outcome==1.3.0.post0
@@ -35,8 +34,7 @@ pytest-metadata==3.1.1
35
34
  pytest-ordering==0.6
36
35
  parameterized==0.9.0
37
36
  behave==1.2.6
38
- soupsieve==2.7
39
- beautifulsoup4==4.13.4
37
+ beautifulsoup4~=4.13.5
40
38
  pyotp==2.9.0
41
39
  mdurl==0.1.2
42
40
  rich<15,>=14.1.0
@@ -58,6 +56,7 @@ websockets~=13.1
58
56
  filelock~=3.16.1
59
57
  platformdirs>=4.3.6
60
58
  MarkupSafe==2.1.5
59
+ requests==2.32.4
61
60
  trio==0.27.0
62
61
  selenium==4.27.1
63
62
  cssselect==1.2.0
@@ -65,6 +64,7 @@ pluggy==1.5.0
65
64
  pytest==8.3.5
66
65
  pytest-rerunfailures==14.0
67
66
  pytest-xdist==3.6.1
67
+ soupsieve==2.7
68
68
 
69
69
  [:python_version >= "3.10"]
70
70
  setuptools>=80.9.0
@@ -76,14 +76,16 @@ markdown-it-py==4.0.0
76
76
  pip>=25.2
77
77
  websockets>=15.0.1
78
78
  filelock>=3.19.1
79
- platformdirs>=4.3.8
79
+ platformdirs>=4.4.0
80
80
  MarkupSafe>=3.0.2
81
+ requests<2.33,>=2.32.5
81
82
  trio==0.30.0
82
83
  cssselect==1.3.0
83
84
  pluggy==1.6.0
84
85
  pytest==8.4.1
85
86
  pytest-rerunfailures==15.1
86
87
  pytest-xdist==3.8.0
88
+ soupsieve~=2.8
87
89
 
88
90
  [:python_version >= "3.9" and python_version < "3.10"]
89
91
  selenium==4.32.0
@@ -100,7 +102,7 @@ coverage>=7.6.1
100
102
  pytest-cov>=5.0.0
101
103
 
102
104
  [coverage:python_version >= "3.9"]
103
- coverage>=7.10.4
105
+ coverage>=7.10.5
104
106
  pytest-cov>=6.2.1
105
107
 
106
108
  [flake8]
@@ -163,7 +163,7 @@ setup(
163
163
  "mycdp>=1.2.0",
164
164
  "pynose>=1.5.4",
165
165
  'platformdirs>=4.3.6;python_version<"3.9"',
166
- 'platformdirs>=4.3.8;python_version>="3.9"',
166
+ 'platformdirs>=4.4.0;python_version>="3.9"',
167
167
  'typing-extensions>=4.13.2',
168
168
  "sbvirtualdisplay>=1.4.0",
169
169
  'MarkupSafe==2.1.5;python_version<"3.9"',
@@ -183,7 +183,8 @@ setup(
183
183
  'charset-normalizer>=3.4.3,<4',
184
184
  'urllib3>=1.26.20,<2;python_version<"3.10"',
185
185
  'urllib3>=1.26.20,<2.6.0;python_version>="3.10"',
186
- 'requests==2.32.4',
186
+ 'requests==2.32.4;python_version<"3.9"',
187
+ 'requests>=2.32.5,<2.33;python_version>="3.9"',
187
188
  'sniffio==1.3.1',
188
189
  'h11==0.16.0',
189
190
  'outcome==1.3.0.post0',
@@ -213,8 +214,9 @@ setup(
213
214
  'pytest-xdist==3.8.0;python_version>="3.9"',
214
215
  'parameterized==0.9.0',
215
216
  "behave==1.2.6", # Newer ones had issues
216
- 'soupsieve==2.7',
217
- "beautifulsoup4==4.13.4",
217
+ 'soupsieve==2.7;python_version<"3.9"',
218
+ 'soupsieve~=2.8;python_version>="3.9"',
219
+ "beautifulsoup4~=4.13.5",
218
220
  'pyotp==2.9.0',
219
221
  'python-xlib==0.33;platform_system=="Linux"',
220
222
  'markdown-it-py==3.0.0;python_version<"3.10"',
@@ -235,7 +237,7 @@ setup(
235
237
  # Usage: coverage run -m pytest; coverage html; coverage report
236
238
  "coverage": [
237
239
  'coverage>=7.6.1;python_version<"3.9"',
238
- 'coverage>=7.10.4;python_version>="3.9"',
240
+ 'coverage>=7.10.5;python_version>="3.9"',
239
241
  'pytest-cov>=5.0.0;python_version<"3.9"',
240
242
  'pytest-cov>=6.2.1;python_version>="3.9"',
241
243
  ],
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes