seleniumbase 4.41.11__tar.gz → 4.42.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {seleniumbase-4.41.11/seleniumbase.egg-info → seleniumbase-4.42.0}/PKG-INFO +9 -8
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/README.md +4 -4
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/requirements.txt +4 -3
- seleniumbase-4.42.0/seleniumbase/__version__.py +2 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/browser_launcher.py +2 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/sb_driver.py +10 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/base_case.py +14 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/page_actions.py +16 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/shared_utils.py +13 -1
- {seleniumbase-4.41.11 → seleniumbase-4.42.0/seleniumbase.egg-info}/PKG-INFO +9 -8
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/requires.txt +4 -3
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/setup.py +4 -3
- seleniumbase-4.41.11/seleniumbase/__version__.py +0 -2
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/.gitignore +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/LICENSE +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/MANIFEST.in +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/install.sh +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/pyproject.toml +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/pytest.ini +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/sbase/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/sbase/__main__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/sbase/steps.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/sb_cdp.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/setup.cfg +0 -0
- {seleniumbase-4.41.11 → seleniumbase-4.42.0}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.42.0
|
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
|
@@ -78,7 +78,8 @@ Requires-Dist: mycdp>=1.2.0
|
|
78
78
|
Requires-Dist: pynose>=1.5.5
|
79
79
|
Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
|
80
80
|
Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
|
81
|
-
Requires-Dist: typing-extensions
|
81
|
+
Requires-Dist: typing-extensions~=4.13.2; python_version < "3.9"
|
82
|
+
Requires-Dist: typing-extensions>=4.15.0; python_version >= "3.9"
|
82
83
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
83
84
|
Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
|
84
85
|
Requires-Dist: MarkupSafe>=3.0.3; python_version >= "3.9"
|
@@ -103,13 +104,13 @@ Requires-Dist: sniffio==1.3.1
|
|
103
104
|
Requires-Dist: h11==0.16.0
|
104
105
|
Requires-Dist: outcome==1.3.0.post0
|
105
106
|
Requires-Dist: trio==0.27.0; python_version < "3.9"
|
106
|
-
Requires-Dist: trio
|
107
|
+
Requires-Dist: trio<1,>=0.31.0; python_version >= "3.9"
|
107
108
|
Requires-Dist: trio-websocket~=0.12.2
|
108
109
|
Requires-Dist: wsproto==1.2.0
|
109
110
|
Requires-Dist: websocket-client~=1.8.0
|
110
111
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
111
112
|
Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
|
112
|
-
Requires-Dist: selenium==4.
|
113
|
+
Requires-Dist: selenium==4.36.0; python_version >= "3.10"
|
113
114
|
Requires-Dist: cssselect==1.2.0; python_version < "3.9"
|
114
115
|
Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
|
115
116
|
Requires-Dist: sortedcontainers==2.4.0
|
@@ -275,7 +276,7 @@ Dynamic: summary
|
|
275
276
|
|
276
277
|
--------
|
277
278
|
|
278
|
-
<p align="left">📗
|
279
|
+
<p align="left">📗 Here's a test script that performs a Google Search using SeleniumBase UC Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
|
279
280
|
|
280
281
|
```python
|
281
282
|
from seleniumbase import SB
|
@@ -299,7 +300,7 @@ with SB(test=True, uc=True) as sb:
|
|
299
300
|
|
300
301
|
--------
|
301
302
|
|
302
|
-
<p align="left">📗 Here's
|
303
|
+
<p align="left">📗 Here's a script that bypasses Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
|
303
304
|
|
304
305
|
```python
|
305
306
|
from seleniumbase import SB
|
@@ -319,7 +320,7 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
319
320
|
|
320
321
|
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
|
321
322
|
|
322
|
-
<p align="left">📙
|
323
|
+
<p align="left">📙 There's also SeleniumBase's "Pure CDP Mode", which doesn't use WebDriver or Selenium at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
|
323
324
|
|
324
325
|
```python
|
325
326
|
from seleniumbase import sb_cdp
|
@@ -333,7 +334,7 @@ sb.highlight('button:contains("Sign in")')
|
|
333
334
|
sb.driver.stop()
|
334
335
|
```
|
335
336
|
|
336
|
-
> (Due to
|
337
|
+
> (Due to changes in Chrome 137 where the `--load-extension` switch was removed, you can't load extensions directly from this format.)
|
337
338
|
|
338
339
|
--------
|
339
340
|
|
@@ -65,7 +65,7 @@
|
|
65
65
|
|
66
66
|
--------
|
67
67
|
|
68
|
-
<p align="left">📗
|
68
|
+
<p align="left">📗 Here's a test script that performs a Google Search using SeleniumBase UC Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
|
69
69
|
|
70
70
|
```python
|
71
71
|
from seleniumbase import SB
|
@@ -89,7 +89,7 @@ with SB(test=True, uc=True) as sb:
|
|
89
89
|
|
90
90
|
--------
|
91
91
|
|
92
|
-
<p align="left">📗 Here's
|
92
|
+
<p align="left">📗 Here's a script that bypasses Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
|
93
93
|
|
94
94
|
```python
|
95
95
|
from seleniumbase import SB
|
@@ -109,7 +109,7 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
109
109
|
|
110
110
|
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
|
111
111
|
|
112
|
-
<p align="left">📙
|
112
|
+
<p align="left">📙 There's also SeleniumBase's "Pure CDP Mode", which doesn't use WebDriver or Selenium at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
|
113
113
|
|
114
114
|
```python
|
115
115
|
from seleniumbase import sb_cdp
|
@@ -123,7 +123,7 @@ sb.highlight('button:contains("Sign in")')
|
|
123
123
|
sb.driver.stop()
|
124
124
|
```
|
125
125
|
|
126
|
-
> (Due to
|
126
|
+
> (Due to changes in Chrome 137 where the `--load-extension` switch was removed, you can't load extensions directly from this format.)
|
127
127
|
|
128
128
|
--------
|
129
129
|
|
@@ -16,7 +16,8 @@ mycdp>=1.2.0
|
|
16
16
|
pynose>=1.5.5
|
17
17
|
platformdirs>=4.3.6;python_version<"3.9"
|
18
18
|
platformdirs>=4.4.0;python_version>="3.9"
|
19
|
-
typing-extensions
|
19
|
+
typing-extensions~=4.13.2;python_version<"3.9"
|
20
|
+
typing-extensions>=4.15.0;python_version>="3.9"
|
20
21
|
sbvirtualdisplay>=1.4.0
|
21
22
|
MarkupSafe==2.1.5;python_version<"3.9"
|
22
23
|
MarkupSafe>=3.0.3;python_version>="3.9"
|
@@ -41,13 +42,13 @@ sniffio==1.3.1
|
|
41
42
|
h11==0.16.0
|
42
43
|
outcome==1.3.0.post0
|
43
44
|
trio==0.27.0;python_version<"3.9"
|
44
|
-
trio
|
45
|
+
trio>=0.31.0,<1;python_version>="3.9"
|
45
46
|
trio-websocket~=0.12.2
|
46
47
|
wsproto==1.2.0
|
47
48
|
websocket-client~=1.8.0
|
48
49
|
selenium==4.27.1;python_version<"3.9"
|
49
50
|
selenium==4.32.0;python_version>="3.9" and python_version<"3.10"
|
50
|
-
selenium==4.
|
51
|
+
selenium==4.36.0;python_version>="3.10"
|
51
52
|
cssselect==1.2.0;python_version<"3.9"
|
52
53
|
cssselect==1.3.0;python_version>="3.9"
|
53
54
|
sortedcontainers==2.4.0
|
@@ -228,6 +228,8 @@ def extend_driver(
|
|
228
228
|
driver.wait_for_element = DM.wait_for_element
|
229
229
|
driver.wait_for_element_visible = DM.wait_for_element_visible
|
230
230
|
driver.wait_for_element_present = DM.wait_for_element_present
|
231
|
+
driver.wait_for_element_absent = DM.wait_for_element_absent
|
232
|
+
driver.wait_for_element_not_visible = DM.wait_for_element_not_visible
|
231
233
|
driver.wait_for_selector = DM.wait_for_selector
|
232
234
|
driver.wait_for_text = DM.wait_for_text
|
233
235
|
driver.wait_for_exact_text = DM.wait_for_exact_text
|
@@ -137,6 +137,16 @@ class DriverMethods(WebDriver):
|
|
137
137
|
def wait_for_element_present(self, *args, **kwargs):
|
138
138
|
return page_actions.wait_for_selector(self.driver, *args, **kwargs)
|
139
139
|
|
140
|
+
def wait_for_element_absent(self, *args, **kwargs):
|
141
|
+
return page_actions.wait_for_element_absent(
|
142
|
+
self.driver, *args, **kwargs
|
143
|
+
)
|
144
|
+
|
145
|
+
def wait_for_element_not_visible(self, *args, **kwargs):
|
146
|
+
return page_actions.wait_for_element_not_visible(
|
147
|
+
self.driver, *args, **kwargs
|
148
|
+
)
|
149
|
+
|
140
150
|
def wait_for_selector(self, *args, **kwargs):
|
141
151
|
return page_actions.wait_for_selector(self.driver, *args, **kwargs)
|
142
152
|
|
@@ -5419,6 +5419,20 @@ class BaseCase(unittest.TestCase):
|
|
5419
5419
|
)
|
5420
5420
|
):
|
5421
5421
|
srt_actions[n][0] = "_skip"
|
5422
|
+
for n in range(len(srt_actions)):
|
5423
|
+
if (
|
5424
|
+
(srt_actions[n][0] == "begin" or srt_actions[n][0] == "_url_")
|
5425
|
+
and n > 1
|
5426
|
+
and (
|
5427
|
+
srt_actions[n - 1][0] == "f_url"
|
5428
|
+
or srt_actions[n - 1][0] == "_url_"
|
5429
|
+
)
|
5430
|
+
and srt_actions[n][2] == srt_actions[n - 1][2]
|
5431
|
+
and (
|
5432
|
+
int(srt_actions[n][3]) - int(srt_actions[n - 1][3]) < 4800
|
5433
|
+
)
|
5434
|
+
):
|
5435
|
+
srt_actions[n][0] = "_skip"
|
5422
5436
|
for n in range(len(srt_actions)):
|
5423
5437
|
if (
|
5424
5438
|
srt_actions[n][0] == "input"
|
@@ -1108,6 +1108,14 @@ def wait_for_element_absent(
|
|
1108
1108
|
timeout - the time to wait for elements in seconds
|
1109
1109
|
original_selector - handle pre-converted ":contains(TEXT)" selector
|
1110
1110
|
"""
|
1111
|
+
if __is_cdp_swap_needed(driver):
|
1112
|
+
if page_utils.is_valid_by(by):
|
1113
|
+
original_selector = selector
|
1114
|
+
elif page_utils.is_valid_by(selector):
|
1115
|
+
original_selector = by
|
1116
|
+
selector, by = page_utils.recalculate_selector(original_selector, by)
|
1117
|
+
driver.cdp.wait_for_element_absent(selector)
|
1118
|
+
return True
|
1111
1119
|
_reconnect_if_disconnected(driver)
|
1112
1120
|
start_ms = time.time() * 1000.0
|
1113
1121
|
stop_ms = start_ms + (timeout * 1000.0)
|
@@ -1156,6 +1164,14 @@ def wait_for_element_not_visible(
|
|
1156
1164
|
timeout - the time to wait for the element in seconds
|
1157
1165
|
original_selector - handle pre-converted ":contains(TEXT)" selector
|
1158
1166
|
"""
|
1167
|
+
if __is_cdp_swap_needed(driver):
|
1168
|
+
if page_utils.is_valid_by(by):
|
1169
|
+
original_selector = selector
|
1170
|
+
elif page_utils.is_valid_by(selector):
|
1171
|
+
original_selector = by
|
1172
|
+
selector, by = page_utils.recalculate_selector(original_selector, by)
|
1173
|
+
driver.cdp.wait_for_element_not_visible(selector)
|
1174
|
+
return True
|
1159
1175
|
_reconnect_if_disconnected(driver)
|
1160
1176
|
start_ms = time.time() * 1000.0
|
1161
1177
|
stop_ms = start_ms + (timeout * 1000.0)
|
@@ -29,8 +29,20 @@ def pip_install(package, version=None):
|
|
29
29
|
)
|
30
30
|
|
31
31
|
|
32
|
+
def is_arm_linux():
|
33
|
+
"""Returns True if machine is ARM Linux.
|
34
|
+
This will be useful once Google adds
|
35
|
+
support for ARM Linux ChromeDriver.
|
36
|
+
(Raspberry Pi uses ARM architecture.)"""
|
37
|
+
return (
|
38
|
+
platform.system() == "Linux"
|
39
|
+
and platform.machine() == "aarch64"
|
40
|
+
)
|
41
|
+
|
42
|
+
|
32
43
|
def is_arm_mac():
|
33
|
-
"""
|
44
|
+
"""Returns True if machine is ARM Mac.
|
45
|
+
(Eg. M1 / M2 Macs use ARM processors)"""
|
34
46
|
return (
|
35
47
|
"darwin" in sys.platform
|
36
48
|
and (
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.
|
3
|
+
Version: 4.42.0
|
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
|
@@ -78,7 +78,8 @@ Requires-Dist: mycdp>=1.2.0
|
|
78
78
|
Requires-Dist: pynose>=1.5.5
|
79
79
|
Requires-Dist: platformdirs>=4.3.6; python_version < "3.9"
|
80
80
|
Requires-Dist: platformdirs>=4.4.0; python_version >= "3.9"
|
81
|
-
Requires-Dist: typing-extensions
|
81
|
+
Requires-Dist: typing-extensions~=4.13.2; python_version < "3.9"
|
82
|
+
Requires-Dist: typing-extensions>=4.15.0; python_version >= "3.9"
|
82
83
|
Requires-Dist: sbvirtualdisplay>=1.4.0
|
83
84
|
Requires-Dist: MarkupSafe==2.1.5; python_version < "3.9"
|
84
85
|
Requires-Dist: MarkupSafe>=3.0.3; python_version >= "3.9"
|
@@ -103,13 +104,13 @@ Requires-Dist: sniffio==1.3.1
|
|
103
104
|
Requires-Dist: h11==0.16.0
|
104
105
|
Requires-Dist: outcome==1.3.0.post0
|
105
106
|
Requires-Dist: trio==0.27.0; python_version < "3.9"
|
106
|
-
Requires-Dist: trio
|
107
|
+
Requires-Dist: trio<1,>=0.31.0; python_version >= "3.9"
|
107
108
|
Requires-Dist: trio-websocket~=0.12.2
|
108
109
|
Requires-Dist: wsproto==1.2.0
|
109
110
|
Requires-Dist: websocket-client~=1.8.0
|
110
111
|
Requires-Dist: selenium==4.27.1; python_version < "3.9"
|
111
112
|
Requires-Dist: selenium==4.32.0; python_version >= "3.9" and python_version < "3.10"
|
112
|
-
Requires-Dist: selenium==4.
|
113
|
+
Requires-Dist: selenium==4.36.0; python_version >= "3.10"
|
113
114
|
Requires-Dist: cssselect==1.2.0; python_version < "3.9"
|
114
115
|
Requires-Dist: cssselect==1.3.0; python_version >= "3.9"
|
115
116
|
Requires-Dist: sortedcontainers==2.4.0
|
@@ -275,7 +276,7 @@ Dynamic: summary
|
|
275
276
|
|
276
277
|
--------
|
277
278
|
|
278
|
-
<p align="left">📗
|
279
|
+
<p align="left">📗 Here's a test script that performs a Google Search using SeleniumBase UC Mode:<br /><a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/raw_google.py">SeleniumBase/examples/raw_google.py</a> (Results are saved as PDF, HTML, and PNG)</p>
|
279
280
|
|
280
281
|
```python
|
281
282
|
from seleniumbase import SB
|
@@ -299,7 +300,7 @@ with SB(test=True, uc=True) as sb:
|
|
299
300
|
|
300
301
|
--------
|
301
302
|
|
302
|
-
<p align="left">📗 Here's
|
303
|
+
<p align="left">📗 Here's a script that bypasses Cloudflare's challenge page with UC Mode + CDP Mode: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_gitlab.py">SeleniumBase/examples/cdp_mode/raw_gitlab.py</a></p>
|
303
304
|
|
304
305
|
```python
|
305
306
|
from seleniumbase import SB
|
@@ -319,7 +320,7 @@ with SB(uc=True, test=True, locale="en") as sb:
|
|
319
320
|
|
320
321
|
<img src="https://seleniumbase.github.io/other/cf_sec.jpg" title="SeleniumBase" width="332"> <img src="https://seleniumbase.github.io/other/gitlab_bypass.png" title="SeleniumBase" width="288">
|
321
322
|
|
322
|
-
<p align="left">📙
|
323
|
+
<p align="left">📙 There's also SeleniumBase's "Pure CDP Mode", which doesn't use WebDriver or Selenium at all: <a href="https://github.com/seleniumbase/SeleniumBase/blob/master/examples/cdp_mode/raw_cdp_gitlab.py">SeleniumBase/examples/cdp_mode/raw_cdp_gitlab.py</a></p>
|
323
324
|
|
324
325
|
```python
|
325
326
|
from seleniumbase import sb_cdp
|
@@ -333,7 +334,7 @@ sb.highlight('button:contains("Sign in")')
|
|
333
334
|
sb.driver.stop()
|
334
335
|
```
|
335
336
|
|
336
|
-
> (Due to
|
337
|
+
> (Due to changes in Chrome 137 where the `--load-extension` switch was removed, you can't load extensions directly from this format.)
|
337
338
|
|
338
339
|
--------
|
339
340
|
|
@@ -6,7 +6,6 @@ exceptiongroup>=1.3.0
|
|
6
6
|
fasteners>=0.20
|
7
7
|
mycdp>=1.2.0
|
8
8
|
pynose>=1.5.5
|
9
|
-
typing-extensions>=4.13.2
|
10
9
|
sbvirtualdisplay>=1.4.0
|
11
10
|
Jinja2>=3.1.6
|
12
11
|
six>=1.17.0
|
@@ -55,6 +54,7 @@ pip>=25.0.1
|
|
55
54
|
websockets~=13.1
|
56
55
|
filelock~=3.16.1
|
57
56
|
platformdirs>=4.3.6
|
57
|
+
typing-extensions~=4.13.2
|
58
58
|
MarkupSafe==2.1.5
|
59
59
|
requests==2.32.4
|
60
60
|
trio==0.27.0
|
@@ -69,7 +69,7 @@ soupsieve==2.7
|
|
69
69
|
[:python_version >= "3.10"]
|
70
70
|
setuptools>=80.9.0
|
71
71
|
urllib3<2.6.0,>=1.26.20
|
72
|
-
selenium==4.
|
72
|
+
selenium==4.36.0
|
73
73
|
markdown-it-py==4.0.0
|
74
74
|
|
75
75
|
[:python_version >= "3.9"]
|
@@ -77,9 +77,10 @@ pip>=25.2
|
|
77
77
|
websockets>=15.0.1
|
78
78
|
filelock>=3.19.1
|
79
79
|
platformdirs>=4.4.0
|
80
|
+
typing-extensions>=4.15.0
|
80
81
|
MarkupSafe>=3.0.3
|
81
82
|
requests~=2.32.5
|
82
|
-
trio
|
83
|
+
trio<1,>=0.31.0
|
83
84
|
cssselect==1.3.0
|
84
85
|
pluggy==1.6.0
|
85
86
|
pytest==8.4.2
|
@@ -164,7 +164,8 @@ setup(
|
|
164
164
|
"pynose>=1.5.5",
|
165
165
|
'platformdirs>=4.3.6;python_version<"3.9"',
|
166
166
|
'platformdirs>=4.4.0;python_version>="3.9"',
|
167
|
-
'typing-extensions
|
167
|
+
'typing-extensions~=4.13.2;python_version<"3.9"',
|
168
|
+
'typing-extensions>=4.15.0;python_version>="3.9"',
|
168
169
|
"sbvirtualdisplay>=1.4.0",
|
169
170
|
'MarkupSafe==2.1.5;python_version<"3.9"',
|
170
171
|
'MarkupSafe>=3.0.3;python_version>="3.9"',
|
@@ -189,13 +190,13 @@ setup(
|
|
189
190
|
'h11==0.16.0',
|
190
191
|
'outcome==1.3.0.post0',
|
191
192
|
'trio==0.27.0;python_version<"3.9"',
|
192
|
-
'trio
|
193
|
+
'trio>=0.31.0,<1;python_version>="3.9"',
|
193
194
|
'trio-websocket~=0.12.2',
|
194
195
|
'wsproto==1.2.0',
|
195
196
|
'websocket-client~=1.8.0',
|
196
197
|
'selenium==4.27.1;python_version<"3.9"',
|
197
198
|
'selenium==4.32.0;python_version>="3.9" and python_version<"3.10"',
|
198
|
-
'selenium==4.
|
199
|
+
'selenium==4.36.0;python_version>="3.10"',
|
199
200
|
'cssselect==1.2.0;python_version<"3.9"',
|
200
201
|
'cssselect==1.3.0;python_version>="3.9"',
|
201
202
|
"sortedcontainers==2.4.0",
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/_contradict.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/undetected/cdp_driver/connection.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/font_color
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat
RENAMED
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_ide/__init__.py
RENAMED
File without changes
|
{seleniumbase-4.41.11 → seleniumbase-4.42.0}/seleniumbase/utilities/selenium_ide/convert_ide.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|