seleniumbase 4.47.7__tar.gz → 4.47.9__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 (162) hide show
  1. {seleniumbase-4.47.7/seleniumbase.egg-info → seleniumbase-4.47.9}/PKG-INFO +5 -4
  2. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/requirements.txt +3 -2
  3. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/__version__.py +1 -1
  4. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/browser_launcher.py +1 -0
  5. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/sb_cdp.py +25 -3
  6. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/cdp_util.py +19 -11
  7. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/config.py +36 -14
  8. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/connection.py +27 -16
  9. {seleniumbase-4.47.7 → seleniumbase-4.47.9/seleniumbase.egg-info}/PKG-INFO +5 -4
  10. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase.egg-info/requires.txt +4 -3
  11. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/setup.py +4 -3
  12. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/.gitignore +0 -0
  13. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/LICENSE +0 -0
  14. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/MANIFEST.in +0 -0
  15. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/README.md +0 -0
  16. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/install.sh +0 -0
  17. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/pyproject.toml +0 -0
  18. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/pytest.ini +0 -0
  19. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/sbase/__init__.py +0 -0
  20. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/sbase/__main__.py +0 -0
  21. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/sbase/steps.py +0 -0
  22. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/__init__.py +0 -0
  23. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/__main__.py +0 -0
  24. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/behave/__init__.py +0 -0
  25. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/behave/behave_helper.py +0 -0
  26. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/behave/behave_sb.py +0 -0
  27. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/behave/steps.py +0 -0
  28. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/common/__init__.py +0 -0
  29. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/common/decorators.py +0 -0
  30. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/common/encryption.py +0 -0
  31. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/common/exceptions.py +0 -0
  32. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/common/obfuscate.py +0 -0
  33. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/common/unobfuscate.py +0 -0
  34. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/config/__init__.py +0 -0
  35. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/config/ad_block_list.py +0 -0
  36. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/config/proxy_list.py +0 -0
  37. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/config/settings.py +0 -0
  38. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/__init__.py +0 -0
  39. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/logo_helper.py +0 -0
  40. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/rich_helper.py +0 -0
  41. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/run.py +0 -0
  42. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
  43. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
  44. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_commander.py +0 -0
  45. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_install.py +0 -0
  46. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
  47. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
  48. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
  49. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
  50. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
  51. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_objectify.py +0 -0
  52. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_print.py +0 -0
  53. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/console_scripts/sb_recorder.py +0 -0
  54. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/__init__.py +0 -0
  55. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/application_manager.py +0 -0
  56. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/capabilities_parser.py +0 -0
  57. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/colored_traceback.py +0 -0
  58. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/create_db_tables.sql +0 -0
  59. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/detect_b_ver.py +0 -0
  60. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/download_helper.py +0 -0
  61. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/encoded_images.py +0 -0
  62. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/jqc_helper.py +0 -0
  63. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/log_helper.py +0 -0
  64. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/mysql.py +0 -0
  65. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/proxy_helper.py +0 -0
  66. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/recorder_helper.py +0 -0
  67. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/report_helper.py +0 -0
  68. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/s3_manager.py +0 -0
  69. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/sb_driver.py +0 -0
  70. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/session_helper.py +0 -0
  71. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/settings_parser.py +0 -0
  72. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/style_sheet.py +0 -0
  73. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/testcase_manager.py +0 -0
  74. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/tour_helper.py +0 -0
  75. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/core/visual_helper.py +0 -0
  76. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/__init__.py +0 -0
  77. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
  78. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
  79. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
  80. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
  81. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
  82. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
  83. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
  84. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/extensions/__init__.py +0 -0
  85. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/extensions/ad_block.zip +0 -0
  86. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/extensions/disable_csp.zip +0 -0
  87. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/extensions/recorder.zip +0 -0
  88. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/extensions/sbase_ext.zip +0 -0
  89. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/__init__.py +0 -0
  90. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/base_case.py +0 -0
  91. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/constants.py +0 -0
  92. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/css_to_xpath.py +0 -0
  93. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/errors.py +0 -0
  94. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/js_utils.py +0 -0
  95. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/page_actions.py +0 -0
  96. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/page_utils.py +0 -0
  97. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/shared_utils.py +0 -0
  98. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/unittest_helper.py +0 -0
  99. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/words.py +0 -0
  100. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/fixtures/xpath_to_css.py +0 -0
  101. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/js_code/__init__.py +0 -0
  102. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/js_code/active_css_js.py +0 -0
  103. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/js_code/live_js.py +0 -0
  104. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/js_code/recorder_js.py +0 -0
  105. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/masterqa/__init__.py +0 -0
  106. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/masterqa/master_qa.py +0 -0
  107. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/__init__.py +0 -0
  108. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/base_plugin.py +0 -0
  109. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/basic_test_info.py +0 -0
  110. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
  111. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/driver_manager.py +0 -0
  112. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/page_source.py +0 -0
  113. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/pytest_plugin.py +0 -0
  114. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
  115. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/sb_manager.py +0 -0
  116. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/screen_shots.py +0 -0
  117. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/plugins/selenium_plugin.py +0 -0
  118. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/resources/__init__.py +0 -0
  119. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/__init__.py +0 -0
  120. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/chinese.py +0 -0
  121. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/dutch.py +0 -0
  122. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/french.py +0 -0
  123. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/italian.py +0 -0
  124. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/japanese.py +0 -0
  125. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/korean.py +0 -0
  126. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/master_dict.py +0 -0
  127. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/portuguese.py +0 -0
  128. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/russian.py +0 -0
  129. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/spanish.py +0 -0
  130. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/translate/translator.py +0 -0
  131. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/__init__.py +0 -0
  132. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp.py +0 -0
  133. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
  134. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
  135. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
  136. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/element.py +0 -0
  137. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
  138. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/dprocess.py +0 -0
  139. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/options.py +0 -0
  140. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/patcher.py +0 -0
  141. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/reactor.py +0 -0
  142. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/undetected/webelement.py +0 -0
  143. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/__init__.py +0 -0
  144. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
  145. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
  146. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/font_color +0 -0
  147. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
  148. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
  149. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
  150. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
  151. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
  152. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
  153. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
  154. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
  155. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
  156. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
  157. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase.egg-info/SOURCES.txt +0 -0
  158. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase.egg-info/dependency_links.txt +0 -0
  159. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase.egg-info/entry_points.txt +0 -0
  160. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/seleniumbase.egg-info/top_level.txt +0 -0
  161. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/setup.cfg +0 -0
  162. {seleniumbase-4.47.7 → seleniumbase-4.47.9}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.47.7
3
+ Version: 4.47.9
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
@@ -84,7 +84,7 @@ Requires-Dist: parse>=1.21.1
84
84
  Requires-Dist: parse-type>=0.6.6
85
85
  Requires-Dist: colorama>=0.4.6
86
86
  Requires-Dist: pyyaml>=6.0.3
87
- Requires-Dist: pygments>=2.19.2
87
+ Requires-Dist: pygments>=2.20.0
88
88
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
89
89
  Requires-Dist: tabcompleter>=1.4.0
90
90
  Requires-Dist: pdbp>=1.8.2
@@ -92,7 +92,8 @@ Requires-Dist: idna>=3.11
92
92
  Requires-Dist: charset-normalizer<4,>=3.4.6
93
93
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
94
94
  Requires-Dist: urllib3<3,>=1.26.20; python_version >= "3.10"
95
- Requires-Dist: requests~=2.32.5
95
+ Requires-Dist: requests~=2.32.5; python_version < "3.10"
96
+ Requires-Dist: requests~=2.33.1; python_version >= "3.10"
96
97
  Requires-Dist: sniffio==1.3.1
97
98
  Requires-Dist: h11==0.16.0
98
99
  Requires-Dist: outcome==1.3.0.post0
@@ -153,7 +154,7 @@ Requires-Dist: mss==10.1.0; extra == "mss"
153
154
  Provides-Extra: pdfminer
154
155
  Requires-Dist: pdfminer.six==20251107; python_version < "3.10" and extra == "pdfminer"
155
156
  Requires-Dist: pdfminer.six==20260107; python_version >= "3.10" and extra == "pdfminer"
156
- Requires-Dist: cryptography==46.0.5; extra == "pdfminer"
157
+ Requires-Dist: cryptography==46.0.6; extra == "pdfminer"
157
158
  Requires-Dist: cffi==2.0.0; extra == "pdfminer"
158
159
  Requires-Dist: pycparser==2.23; python_version < "3.10" and extra == "pdfminer"
159
160
  Requires-Dist: pycparser==3.0; python_version >= "3.10" and extra == "pdfminer"
@@ -24,7 +24,7 @@ parse>=1.21.1
24
24
  parse-type>=0.6.6
25
25
  colorama>=0.4.6
26
26
  pyyaml>=6.0.3
27
- pygments>=2.19.2
27
+ pygments>=2.20.0
28
28
  pyreadline3>=3.5.4;platform_system=="Windows"
29
29
  tabcompleter>=1.4.0
30
30
  pdbp>=1.8.2
@@ -32,7 +32,8 @@ idna>=3.11
32
32
  charset-normalizer>=3.4.6,<4
33
33
  urllib3>=1.26.20,<2;python_version<"3.10"
34
34
  urllib3>=1.26.20,<3;python_version>="3.10"
35
- requests~=2.32.5
35
+ requests~=2.32.5;python_version<"3.10"
36
+ requests~=2.33.1;python_version>="3.10"
36
37
  sniffio==1.3.1
37
38
  h11==0.16.0
38
39
  outcome==1.3.0.post0
@@ -1,2 +1,2 @@
1
1
  # seleniumbase package
2
- __version__ = "4.47.7"
2
+ __version__ = "4.47.9"
@@ -872,6 +872,7 @@ def uc_open_with_cdp_mode(driver, url=None, **kwargs):
872
872
  cdp.get_gui_element_center = CDPM.get_gui_element_center
873
873
  cdp.get_html = CDPM.get_html
874
874
  cdp.get_page_source = CDPM.get_page_source
875
+ cdp.get_beautiful_soup = CDPM.get_beautiful_soup
875
876
  cdp.get_user_agent = CDPM.get_user_agent
876
877
  cdp.get_cookie_string = CDPM.get_cookie_string
877
878
  cdp.get_locale_code = CDPM.get_locale_code
@@ -117,10 +117,10 @@ class CDPMethods():
117
117
  if hasattr(driver, "cdp_base"):
118
118
  driver = driver.cdp_base
119
119
  load_timeout = 60.0
120
- wait_timeout = 30.0
120
+ wait_timeout = 50.0
121
121
  if hasattr(sb_config, "_cdp_proxy") and sb_config._cdp_proxy:
122
122
  load_timeout = 90.0
123
- wait_timeout = 45.0
123
+ wait_timeout = 75.0
124
124
  try:
125
125
  task = self.page.get(url, **kwargs)
126
126
  self.loop.run_until_complete(
@@ -128,6 +128,10 @@ class CDPMethods():
128
128
  )
129
129
  except asyncio.TimeoutError:
130
130
  print("Timeout loading %s" % url)
131
+ except RuntimeError:
132
+ self.loop.run_until_complete(
133
+ self.page.get(url, **kwargs)
134
+ )
131
135
  url_protocol = url.split(":")[0]
132
136
  safe_url = True
133
137
  if url_protocol not in ["about", "data", "chrome"]:
@@ -1064,7 +1068,11 @@ class CDPMethods():
1064
1068
  ):
1065
1069
  text = text.replace("\n", "\r")
1066
1070
  for key in text:
1067
- element.send_keys(key)
1071
+ try:
1072
+ element.send_keys(key)
1073
+ except AttributeError:
1074
+ element = self.select(selector, timeout=0.1)
1075
+ element.send_keys(key)
1068
1076
  time.sleep(float(0.042 + (random.random() / 110.0)))
1069
1077
  if submit:
1070
1078
  element.send_keys("\r\n")
@@ -1395,6 +1403,20 @@ class CDPMethods():
1395
1403
  )
1396
1404
  return source
1397
1405
 
1406
+ def get_beautiful_soup(self, source=None):
1407
+ """BeautifulSoup is a toolkit for dissecting an HTML document
1408
+ and extracting what you need. It's great for screen-scraping!
1409
+ See: https://www.crummy.com/software/BeautifulSoup/bs4/doc/ """
1410
+ from bs4 import BeautifulSoup
1411
+
1412
+ if not source:
1413
+ with suppress(Exception):
1414
+ self.wait_for_element_visible(
1415
+ "body", timeout=settings.MINI_TIMEOUT
1416
+ )
1417
+ source = self.get_page_source()
1418
+ return BeautifulSoup(source, "html.parser")
1419
+
1398
1420
  def get_user_agent(self):
1399
1421
  return self.loop.run_until_complete(
1400
1422
  self.page.evaluate("navigator.userAgent")
@@ -31,6 +31,7 @@ DOWNLOADS_FOLDER = download_helper.get_downloads_folder()
31
31
  PROXY_DIR_LOCK = proxy_helper.PROXY_DIR_LOCK
32
32
  EXTENSIONS_DIR = os.path.dirname(os.path.realpath(extensions.__file__))
33
33
  AD_BLOCK_ZIP_PATH = os.path.join(EXTENSIONS_DIR, "ad_block.zip")
34
+ DISABLE_CSP_ZIP_PATH = os.path.join(EXTENSIONS_DIR, "disable_csp.zip")
34
35
  T = typing.TypeVar("T")
35
36
 
36
37
 
@@ -598,16 +599,6 @@ async def start(
598
599
  proxy_pass,
599
600
  proxy_scheme,
600
601
  )
601
- if ad_block:
602
- sb_config.ad_block_on = True
603
- incognito = False
604
- guest = False
605
- ad_block_zip = AD_BLOCK_ZIP_PATH
606
- ad_block_dir = os.path.join(DOWNLOADS_FOLDER, "ad_block")
607
- __unzip_to_new_folder(ad_block_zip, ad_block_dir)
608
- extension_dir = __add_chrome_ext_dir(extension_dir, ad_block_dir)
609
- if disable_csp:
610
- sb_config.disable_csp = True
611
602
  if "binary_location" in kwargs and not browser_executable_path:
612
603
  browser_executable_path = kwargs["binary_location"]
613
604
  if not user_data_dir and "--user-data-dir" in arg_join:
@@ -624,8 +615,8 @@ async def start(
624
615
  user_data_dir = udd_string
625
616
  if user_data_dir:
626
617
  user_data_dir = os.path.abspath(user_data_dir)
618
+ browser = None
627
619
  if not browser_executable_path:
628
- browser = None
629
620
  if "browser" in kwargs:
630
621
  browser = kwargs["browser"]
631
622
  if not browser and "--browser" in arg_join:
@@ -675,6 +666,23 @@ async def start(
675
666
  sb_config._cdp_browser = "atlas"
676
667
  else:
677
668
  sb_config._cdp_browser = "chrome"
669
+ if ad_block:
670
+ sb_config.ad_block_on = True
671
+ incognito = False
672
+ guest = False
673
+ ad_block_zip = AD_BLOCK_ZIP_PATH
674
+ ad_block_dir = os.path.join(DOWNLOADS_FOLDER, "ad_block")
675
+ __unzip_to_new_folder(ad_block_zip, ad_block_dir)
676
+ extension_dir = __add_chrome_ext_dir(extension_dir, ad_block_dir)
677
+ if disable_csp:
678
+ sb_config.disable_csp = True
679
+ if not incognito and not guest:
680
+ disable_csp_zip = DISABLE_CSP_ZIP_PATH
681
+ disable_csp_dir = os.path.join(DOWNLOADS_FOLDER, "disable_csp")
682
+ __unzip_to_new_folder(disable_csp_zip, disable_csp_dir)
683
+ extension_dir = __add_chrome_ext_dir(
684
+ extension_dir, disable_csp_dir
685
+ )
678
686
  sb_config.incognito = incognito
679
687
  sb_config.guest_mode = guest
680
688
  if not config:
@@ -1,3 +1,4 @@
1
+ import json
1
2
  import logging
2
3
  import os
3
4
  import pathlib
@@ -88,19 +89,19 @@ class Config:
88
89
  if not browser_args:
89
90
  browser_args = []
90
91
  if not user_data_dir:
91
- self.user_data_dir = temp_profile_dir()
92
+ self.user_data_dir = temp_profile_dir(proxy=proxy)
92
93
  self._user_data_dir = self.user_data_dir
93
94
  self._custom_data_dir = False
94
95
  else:
95
96
  self.user_data_dir = user_data_dir
96
97
  profile = os.path.join(self.user_data_dir, "Default")
97
98
  preferences_file = os.path.join(profile, "Preferences")
98
- preferences = get_default_preferences()
99
+ preferences = get_default_preferences(proxy=proxy)
99
100
  if not os.path.exists(profile):
100
101
  with suppress(Exception):
101
102
  os.makedirs(profile)
102
- with open(preferences_file, "w") as f:
103
- f.write(preferences)
103
+ with open(preferences_file, "w", encoding="utf-8") as f:
104
+ json.dump(preferences, f)
104
105
  mock_keychain = False
105
106
  if not browser_executable_path:
106
107
  browser_executable_path = find_chrome_executable()
@@ -343,25 +344,46 @@ def is_root():
343
344
  return ctypes.windll.shell32.IsUserAnAdmin() != 0
344
345
 
345
346
 
346
- def get_default_preferences():
347
- return (
348
- """{"credentials_enable_service": false,
349
- "password_manager_enabled": false,
350
- "password_manager_leak_detection": false}"""
351
- )
347
+ def get_default_preferences(proxy=None):
348
+ prefs = {
349
+ "profile": {
350
+ "password_manager_leak_detection": False,
351
+ "password_manager_enabled": False
352
+ },
353
+ "credentials_enable_service": False,
354
+ "omnibox-max-zero-suggest-matches": 0,
355
+ "omnibox-zero-suggest-prefetching": 0,
356
+ "omnibox-zero-suggest-prefetching-on-srp": 0,
357
+ "omnibox-zero-suggest-prefetching-on-web": 0,
358
+ "omnibox-zero-suggest-in-memory-caching": 0,
359
+ "local_discovery": {
360
+ "notifications_enabled": False
361
+ },
362
+ "autofill": {
363
+ "profile_enabled": False,
364
+ "credit_card_enabled": False
365
+ }
366
+ }
367
+ if proxy:
368
+ prefs["webrtc"] = {
369
+ "ip_handling_policy": "disable_non_proxied_udp",
370
+ "multiple_routes_enabled": False,
371
+ "nonproxied_udp_enabled": False
372
+ }
373
+ return prefs
352
374
 
353
375
 
354
- def temp_profile_dir():
376
+ def temp_profile_dir(proxy=None):
355
377
  """Generate a temp dir (path)"""
356
378
  path = os.path.normpath(tempfile.mkdtemp(prefix="uc_"))
357
379
  profile = os.path.join(path, "Default")
358
380
  preferences_file = os.path.join(profile, "Preferences")
359
- preferences = get_default_preferences()
381
+ preferences = get_default_preferences(proxy=proxy)
360
382
  if not os.path.exists(profile):
361
383
  with suppress(Exception):
362
384
  os.makedirs(profile)
363
- with open(preferences_file, "w") as f:
364
- f.write(preferences)
385
+ with open(preferences_file, "w", encoding="utf-8") as f:
386
+ json.dump(preferences, f)
365
387
  return path
366
388
 
367
389
 
@@ -305,20 +305,31 @@ class Connection(metaclass=CantTouchThis):
305
305
  await self.update_target()
306
306
  loop = asyncio.get_running_loop()
307
307
  start_time = loop.time()
308
- try:
309
- if isinstance(t, (int, float)):
310
- await asyncio.wait_for(self.listener.idle.wait(), timeout=t)
311
- while (loop.time() - start_time) < t:
312
- await asyncio.sleep(0.1)
313
- else:
314
- await self.listener.idle.wait()
315
- except asyncio.TimeoutError:
316
- if isinstance(t, (int, float)):
317
- # Explicit time is given, which is now passed, so leave now.
318
- return
319
- except AttributeError:
320
- # No listener created yet.
321
- pass
308
+ with warnings.catch_warnings():
309
+ warnings.filterwarnings(
310
+ action="ignore",
311
+ category=RuntimeWarning,
312
+ message=".*coroutine.*",
313
+ )
314
+ try:
315
+ if isinstance(t, (int, float)):
316
+ try:
317
+ await asyncio.wait_for(
318
+ self.listener.idle.wait(), timeout=t
319
+ )
320
+ except RuntimeError:
321
+ await self.listener.idle.wait()
322
+ while (loop.time() - start_time) < t:
323
+ await asyncio.sleep(0.1)
324
+ else:
325
+ await self.listener.idle.wait()
326
+ except asyncio.TimeoutError:
327
+ if isinstance(t, (int, float)):
328
+ # Explicit time that's given has passed, so leave now.
329
+ return
330
+ except AttributeError:
331
+ # No listener created yet.
332
+ pass
322
333
 
323
334
  async def set_locale(self, locale: Optional[str] = None):
324
335
  """Sets the Language Locale code via set_user_agent_override."""
@@ -423,9 +434,9 @@ class Connection(metaclass=CantTouchThis):
423
434
  await self.websocket.send(tx.message)
424
435
  with warnings.catch_warnings():
425
436
  warnings.filterwarnings(
426
- "ignore",
427
- message="coroutine .* was never awaited",
437
+ action="ignore",
428
438
  category=RuntimeWarning,
439
+ message=".*coroutine.*",
429
440
  )
430
441
  try:
431
442
  return await tx
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: seleniumbase
3
- Version: 4.47.7
3
+ Version: 4.47.9
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
@@ -84,7 +84,7 @@ Requires-Dist: parse>=1.21.1
84
84
  Requires-Dist: parse-type>=0.6.6
85
85
  Requires-Dist: colorama>=0.4.6
86
86
  Requires-Dist: pyyaml>=6.0.3
87
- Requires-Dist: pygments>=2.19.2
87
+ Requires-Dist: pygments>=2.20.0
88
88
  Requires-Dist: pyreadline3>=3.5.4; platform_system == "Windows"
89
89
  Requires-Dist: tabcompleter>=1.4.0
90
90
  Requires-Dist: pdbp>=1.8.2
@@ -92,7 +92,8 @@ Requires-Dist: idna>=3.11
92
92
  Requires-Dist: charset-normalizer<4,>=3.4.6
93
93
  Requires-Dist: urllib3<2,>=1.26.20; python_version < "3.10"
94
94
  Requires-Dist: urllib3<3,>=1.26.20; python_version >= "3.10"
95
- Requires-Dist: requests~=2.32.5
95
+ Requires-Dist: requests~=2.32.5; python_version < "3.10"
96
+ Requires-Dist: requests~=2.33.1; python_version >= "3.10"
96
97
  Requires-Dist: sniffio==1.3.1
97
98
  Requires-Dist: h11==0.16.0
98
99
  Requires-Dist: outcome==1.3.0.post0
@@ -153,7 +154,7 @@ Requires-Dist: mss==10.1.0; extra == "mss"
153
154
  Provides-Extra: pdfminer
154
155
  Requires-Dist: pdfminer.six==20251107; python_version < "3.10" and extra == "pdfminer"
155
156
  Requires-Dist: pdfminer.six==20260107; python_version >= "3.10" and extra == "pdfminer"
156
- Requires-Dist: cryptography==46.0.5; extra == "pdfminer"
157
+ Requires-Dist: cryptography==46.0.6; extra == "pdfminer"
157
158
  Requires-Dist: cffi==2.0.0; extra == "pdfminer"
158
159
  Requires-Dist: pycparser==2.23; python_version < "3.10" and extra == "pdfminer"
159
160
  Requires-Dist: pycparser==3.0; python_version >= "3.10" and extra == "pdfminer"
@@ -16,12 +16,11 @@ parse>=1.21.1
16
16
  parse-type>=0.6.6
17
17
  colorama>=0.4.6
18
18
  pyyaml>=6.0.3
19
- pygments>=2.19.2
19
+ pygments>=2.20.0
20
20
  tabcompleter>=1.4.0
21
21
  pdbp>=1.8.2
22
22
  idna>=3.11
23
23
  charset-normalizer<4,>=3.4.6
24
- requests~=2.32.5
25
24
  sniffio==1.3.1
26
25
  h11==0.16.0
27
26
  outcome==1.3.0.post0
@@ -55,6 +54,7 @@ websockets~=15.0.1
55
54
  filelock~=3.19.1
56
55
  platformdirs~=4.4.0
57
56
  urllib3<2,>=1.26.20
57
+ requests~=2.32.5
58
58
  trio<1,>=0.31.0
59
59
  wsproto==1.2.0
60
60
  selenium==4.32.0
@@ -73,6 +73,7 @@ websockets>=16.0
73
73
  filelock>=3.25.2
74
74
  platformdirs>=4.9.4
75
75
  urllib3<3,>=1.26.20
76
+ requests~=2.33.1
76
77
  trio<1,>=0.33.0
77
78
  wsproto~=1.3.2
78
79
  selenium==4.41.0
@@ -113,7 +114,7 @@ ipython==7.34.0
113
114
  mss==10.1.0
114
115
 
115
116
  [pdfminer]
116
- cryptography==46.0.5
117
+ cryptography==46.0.6
117
118
  cffi==2.0.0
118
119
 
119
120
  [pdfminer:python_version < "3.10"]
@@ -172,7 +172,7 @@ setup(
172
172
  'parse-type>=0.6.6',
173
173
  'colorama>=0.4.6',
174
174
  'pyyaml>=6.0.3',
175
- 'pygments>=2.19.2',
175
+ 'pygments>=2.20.0',
176
176
  'pyreadline3>=3.5.4;platform_system=="Windows"',
177
177
  'tabcompleter>=1.4.0',
178
178
  'pdbp>=1.8.2',
@@ -180,7 +180,8 @@ setup(
180
180
  'charset-normalizer>=3.4.6,<4',
181
181
  'urllib3>=1.26.20,<2;python_version<"3.10"',
182
182
  'urllib3>=1.26.20,<3;python_version>="3.10"',
183
- 'requests~=2.32.5',
183
+ 'requests~=2.32.5;python_version<"3.10"',
184
+ 'requests~=2.33.1;python_version>="3.10"',
184
185
  'sniffio==1.3.1',
185
186
  'h11==0.16.0',
186
187
  'outcome==1.3.0.post0',
@@ -261,7 +262,7 @@ setup(
261
262
  "pdfminer": [
262
263
  'pdfminer.six==20251107;python_version<"3.10"',
263
264
  'pdfminer.six==20260107;python_version>="3.10"',
264
- 'cryptography==46.0.5',
265
+ 'cryptography==46.0.6',
265
266
  'cffi==2.0.0',
266
267
  'pycparser==2.23;python_version<"3.10"',
267
268
  'pycparser==3.0;python_version>="3.10"',
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes