seleniumbase 4.50.1__tar.gz → 4.50.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.
Potentially problematic release.
This version of seleniumbase might be problematic. Click here for more details.
- {seleniumbase-4.50.1/seleniumbase.egg-info → seleniumbase-4.50.3}/PKG-INFO +4 -4
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/README.md +1 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/requirements.txt +2 -2
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/behave/behave_sb.py +5 -2
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/run.py +5 -3
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_install.py +4 -3
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/browser_launcher.py +4 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/sb_cdp.py +8 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/base_case.py +4 -4
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/driver_manager.py +4 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/pytest_plugin.py +2 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/sb_manager.py +4 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/selenium_plugin.py +2 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/browser.py +66 -13
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/cdp_util.py +7 -9
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/config.py +3 -1
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/element.py +25 -11
- {seleniumbase-4.50.1 → seleniumbase-4.50.3/seleniumbase.egg-info}/PKG-INFO +4 -4
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase.egg-info/requires.txt +2 -2
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/setup.py +2 -2
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/.gitignore +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/LICENSE +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/MANIFEST.in +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/install.sh +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/pyproject.toml +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/pytest.ini +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/sbase/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/sbase/__main__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/sbase/steps.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/atlas_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/brave_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/cft_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/chromium_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/chs_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/comet_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/opera_drivers/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/tab.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/setup.cfg +0 -0
- {seleniumbase-4.50.1 → seleniumbase-4.50.3}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.50.
|
|
3
|
+
Version: 4.50.3
|
|
4
4
|
Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -117,7 +117,7 @@ Requires-Dist: iniconfig==2.1.0; python_version < "3.10"
|
|
|
117
117
|
Requires-Dist: iniconfig==2.3.0; python_version >= "3.10"
|
|
118
118
|
Requires-Dist: pluggy==1.6.0
|
|
119
119
|
Requires-Dist: pytest==8.4.2; python_version < "3.11"
|
|
120
|
-
Requires-Dist: pytest==9.1.
|
|
120
|
+
Requires-Dist: pytest==9.1.1; python_version >= "3.11"
|
|
121
121
|
Requires-Dist: pytest-html==4.0.2
|
|
122
122
|
Requires-Dist: pytest-metadata==3.1.1
|
|
123
123
|
Requires-Dist: pytest-ordering==0.6
|
|
@@ -141,7 +141,7 @@ Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
|
|
|
141
141
|
Requires-Dist: allure-behave>=2.16.0; extra == "allure"
|
|
142
142
|
Provides-Extra: coverage
|
|
143
143
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
144
|
-
Requires-Dist: coverage>=7.14.
|
|
144
|
+
Requires-Dist: coverage>=7.14.3; python_version >= "3.10" and extra == "coverage"
|
|
145
145
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
146
146
|
Provides-Extra: flake8
|
|
147
147
|
Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
@@ -335,7 +335,7 @@ for element in elements:
|
|
|
335
335
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
336
336
|
|
|
337
337
|
```zsh
|
|
338
|
-
python SCRIPT.py --
|
|
338
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
339
339
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
340
340
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
341
341
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -149,7 +149,7 @@ for element in elements:
|
|
|
149
149
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
150
150
|
|
|
151
151
|
```zsh
|
|
152
|
-
python SCRIPT.py --
|
|
152
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
153
153
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
154
154
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
155
155
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -56,7 +56,7 @@ iniconfig==2.1.0;python_version<"3.10"
|
|
|
56
56
|
iniconfig==2.3.0;python_version>="3.10"
|
|
57
57
|
pluggy==1.6.0
|
|
58
58
|
pytest==8.4.2;python_version<"3.11"
|
|
59
|
-
pytest==9.1.
|
|
59
|
+
pytest==9.1.1;python_version>="3.11"
|
|
60
60
|
pytest-html==4.0.2
|
|
61
61
|
pytest-metadata==3.1.1
|
|
62
62
|
pytest-ordering==0.6
|
|
@@ -79,7 +79,7 @@ rich>=15.0.0,<16
|
|
|
79
79
|
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
|
|
80
80
|
|
|
81
81
|
coverage>=7.10.7;python_version<"3.10"
|
|
82
|
-
coverage>=7.14.
|
|
82
|
+
coverage>=7.14.3;python_version>="3.10"
|
|
83
83
|
pytest-cov>=7.1.0
|
|
84
84
|
flake8==7.3.0
|
|
85
85
|
mccabe==0.7.0
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.50.
|
|
2
|
+
__version__ = "4.50.3"
|
|
@@ -492,8 +492,11 @@ def get_configured_sb(context):
|
|
|
492
492
|
sb.binary_location = binary_location
|
|
493
493
|
sb_config.binary_location = binary_location
|
|
494
494
|
continue
|
|
495
|
-
# Handle: -D use-chromium
|
|
496
|
-
if
|
|
495
|
+
# Handle: -D use-chromium / chromium
|
|
496
|
+
if (
|
|
497
|
+
low_key in ["use-chromium", "chromium"]
|
|
498
|
+
and not sb_config.binary_location
|
|
499
|
+
):
|
|
497
500
|
binary_location = "_chromium_"
|
|
498
501
|
sb.binary_location = binary_location
|
|
499
502
|
sb_config.binary_location = binary_location
|
|
@@ -152,12 +152,14 @@ def show_install_usage():
|
|
|
152
152
|
print(" sbase get chromedriver")
|
|
153
153
|
print(" sbase get geckodriver")
|
|
154
154
|
print(" sbase get edgedriver")
|
|
155
|
-
print(" sbase get chromedriver
|
|
156
|
-
print(" sbase get chromedriver
|
|
155
|
+
print(" sbase get chromedriver 149")
|
|
156
|
+
print(" sbase get chromedriver 149.0.7827.115")
|
|
157
157
|
print(" sbase get chromedriver stable")
|
|
158
158
|
print(" sbase get chromedriver beta")
|
|
159
159
|
print(" sbase get chromedriver -p")
|
|
160
|
-
print(" sbase get
|
|
160
|
+
print(" sbase get chromium")
|
|
161
|
+
print(" sbase get chromium --revision=1639046")
|
|
162
|
+
print(" sbase get cft 149")
|
|
161
163
|
print(" sbase get chs")
|
|
162
164
|
print(" Output:")
|
|
163
165
|
print(" Downloads the webdriver to seleniumbase/drivers/")
|
|
@@ -14,13 +14,14 @@ Examples:
|
|
|
14
14
|
sbase get chromedriver
|
|
15
15
|
sbase get geckodriver
|
|
16
16
|
sbase get edgedriver
|
|
17
|
-
sbase get chromedriver
|
|
18
|
-
sbase get chromedriver
|
|
17
|
+
sbase get chromedriver 149
|
|
18
|
+
sbase get chromedriver 149.0.7827.115
|
|
19
19
|
sbase get chromedriver stable
|
|
20
20
|
sbase get chromedriver beta
|
|
21
21
|
sbase get chromedriver -p
|
|
22
22
|
sbase get chromium
|
|
23
|
-
sbase get
|
|
23
|
+
sbase get chromium --revision=1639046
|
|
24
|
+
sbase get cft 149
|
|
24
25
|
sbase get chs
|
|
25
26
|
Output:
|
|
26
27
|
Downloads the webdriver to seleniumbase/drivers/
|
|
@@ -5012,7 +5012,10 @@ def get_local_driver(
|
|
|
5012
5012
|
device_height,
|
|
5013
5013
|
device_pixel_ratio,
|
|
5014
5014
|
)
|
|
5015
|
-
if
|
|
5015
|
+
if (
|
|
5016
|
+
(binary_location and "chromium_drivers" in binary_location)
|
|
5017
|
+
or (binary_location and "Chromium.app" in binary_location)
|
|
5018
|
+
):
|
|
5016
5019
|
chrome_options.add_argument("--use-mock-keychain")
|
|
5017
5020
|
use_version = "latest"
|
|
5018
5021
|
major_chrome_version = None
|
|
@@ -2163,6 +2163,10 @@ class CDPMethods():
|
|
|
2163
2163
|
self.__slow_mode_pause_if_set()
|
|
2164
2164
|
self.loop.run_until_complete(self.page.wait(0.2))
|
|
2165
2165
|
|
|
2166
|
+
def stop(self):
|
|
2167
|
+
"""Same as quit()"""
|
|
2168
|
+
self.quit()
|
|
2169
|
+
|
|
2166
2170
|
def quit(self):
|
|
2167
2171
|
"""Quit the browser in the Pure CDP Mode Sync format."""
|
|
2168
2172
|
driver = self.driver
|
|
@@ -2304,6 +2308,8 @@ class CDPMethods():
|
|
|
2304
2308
|
time.sleep(0.48)
|
|
2305
2309
|
self.loop.run_until_complete(self.page.wait(0.1))
|
|
2306
2310
|
x2 = x2 + 22.5 # Overshoot drop to maximize compatibility
|
|
2311
|
+
y1 = y1 + 3
|
|
2312
|
+
y2 = y2 + 3
|
|
2307
2313
|
self.gui_drag_drop_points(x1, y1, x2, y2, timeframe=0.55)
|
|
2308
2314
|
time.sleep(0.25)
|
|
2309
2315
|
self.loop.run_until_complete(self.page.wait(0.2))
|
|
@@ -3544,8 +3550,9 @@ class Chrome(CDPMethods):
|
|
|
3544
3550
|
def __init__(self, url=None, **kwargs):
|
|
3545
3551
|
if not url:
|
|
3546
3552
|
url = "about:blank"
|
|
3547
|
-
driver = cdp_util.start_sync(**kwargs)
|
|
3548
3553
|
loop = asyncio.new_event_loop()
|
|
3554
|
+
kwargs["loop"] = loop
|
|
3555
|
+
driver = cdp_util.start_sync(**kwargs)
|
|
3549
3556
|
page = loop.run_until_complete(driver.get(url))
|
|
3550
3557
|
wait_timeout = 30.0
|
|
3551
3558
|
if hasattr(sb_config, "_cdp_proxy") and sb_config._cdp_proxy:
|
|
@@ -16841,13 +16841,13 @@ class BaseCase(unittest.TestCase):
|
|
|
16841
16841
|
'<thead id="results-table-head">'
|
|
16842
16842
|
'<tr style="background-color: #F7F7FD;">'
|
|
16843
16843
|
'<th style="background-color: #FFF8F8; color: #FF2222;">'
|
|
16844
|
-
'Failed: %s</th>'
|
|
16844
|
+
'Failed: %s </th>'
|
|
16845
16845
|
'<th style="background-color: #FEFEF9; color: #FFA500;">'
|
|
16846
|
-
'Skipped: %s</th>'
|
|
16846
|
+
'Skipped: %s </th>'
|
|
16847
16847
|
'<th style="background-color: #F8FFF8; color: #12A212;">'
|
|
16848
|
-
'Passed: %s</th>'
|
|
16848
|
+
'Passed: %s </th>'
|
|
16849
16849
|
'<th style="background-color: #F9F9F9; color: #8C8C8C;">'
|
|
16850
|
-
'Untested: %s</th>'
|
|
16850
|
+
'Untested: %s </th>'
|
|
16851
16851
|
'<th style="background-color: #F4F4FF; color: #575792;">'
|
|
16852
16852
|
'Total: %s</th>'
|
|
16853
16853
|
"</tr></thead></table>"
|
|
@@ -668,7 +668,10 @@ def Driver(
|
|
|
668
668
|
binary_location = "cft"
|
|
669
669
|
elif chs and not binary_location:
|
|
670
670
|
binary_location = "chs"
|
|
671
|
-
if
|
|
671
|
+
if (
|
|
672
|
+
("--use-chromium" in sys_argv and not binary_location)
|
|
673
|
+
or ("--chromium" in sys_argv and not binary_location)
|
|
674
|
+
):
|
|
672
675
|
binary_location = "_chromium_"
|
|
673
676
|
elif "--cft" in sys_argv and not binary_location:
|
|
674
677
|
binary_location = "cft"
|
|
@@ -33,7 +33,7 @@ def pytest_addoption(parser):
|
|
|
33
33
|
--brave (Shortcut for "--browser=brave".)
|
|
34
34
|
--comet (Shortcut for "--browser=comet".)
|
|
35
35
|
--atlas (Shortcut for "--browser=atlas".)
|
|
36
|
-
--
|
|
36
|
+
--chromium (Shortcut for using base `Chromium`)
|
|
37
37
|
--cft (Shortcut for using `Chrome for Testing`)
|
|
38
38
|
--chs (Shortcut for using `Chrome-Headless-Shell`)
|
|
39
39
|
--settings-file=FILE (Override default SeleniumBase settings.)
|
|
@@ -223,6 +223,7 @@ def pytest_addoption(parser):
|
|
|
223
223
|
)
|
|
224
224
|
parser.addoption(
|
|
225
225
|
"--use-chromium",
|
|
226
|
+
"--chromium",
|
|
226
227
|
action="store_true",
|
|
227
228
|
dest="use_chromium",
|
|
228
229
|
default=False,
|
|
@@ -708,7 +708,10 @@ def SB(
|
|
|
708
708
|
binary_location = "cft"
|
|
709
709
|
elif chs and not binary_location:
|
|
710
710
|
binary_location = "chs"
|
|
711
|
-
if
|
|
711
|
+
if (
|
|
712
|
+
("--use-chromium" in sys_argv and not binary_location)
|
|
713
|
+
or ("--chromium" in sys_argv and not binary_location)
|
|
714
|
+
):
|
|
712
715
|
binary_location = "_chromium_"
|
|
713
716
|
elif "--cft" in sys_argv and not binary_location:
|
|
714
717
|
binary_location = "cft"
|
|
@@ -22,7 +22,7 @@ class SeleniumBrowser(Plugin):
|
|
|
22
22
|
--brave (Shortcut for "--browser=brave".)
|
|
23
23
|
--comet (Shortcut for "--browser=comet".)
|
|
24
24
|
--atlas (Shortcut for "--browser=atlas".)
|
|
25
|
-
--
|
|
25
|
+
--chromium (Shortcut for using base `Chromium`)
|
|
26
26
|
--cft (Shortcut for using `Chrome for Testing`)
|
|
27
27
|
--chs (Shortcut for using `Chrome-Headless-Shell`)
|
|
28
28
|
--user-data-dir=DIR (Set the Chrome user data directory to use.)
|
|
@@ -184,6 +184,7 @@ class SeleniumBrowser(Plugin):
|
|
|
184
184
|
)
|
|
185
185
|
parser.addoption(
|
|
186
186
|
"--use-chromium",
|
|
187
|
+
"--chromium",
|
|
187
188
|
action="store_true",
|
|
188
189
|
dest="use_chromium",
|
|
189
190
|
default=False,
|
|
@@ -50,23 +50,29 @@ def deconstruct_browser():
|
|
|
50
50
|
_.config.user_data_dir, ignore_errors=False
|
|
51
51
|
)
|
|
52
52
|
if not os.path.exists(_.config.user_data_dir):
|
|
53
|
+
logger.debug(
|
|
54
|
+
"Temp profile %s was removed."
|
|
55
|
+
% _.config.user_data_dir
|
|
56
|
+
)
|
|
53
57
|
break
|
|
54
58
|
else:
|
|
55
59
|
time.sleep(0.12)
|
|
56
60
|
except FileNotFoundError:
|
|
61
|
+
logger.debug(
|
|
62
|
+
"Temp profile %s was removed." % _.config.user_data_dir
|
|
63
|
+
)
|
|
57
64
|
break
|
|
58
65
|
except (PermissionError, OSError) as e:
|
|
59
66
|
if attempt == max_attempts - 1:
|
|
60
67
|
logger.debug(
|
|
61
|
-
"Problem removing data dir %s
|
|
68
|
+
"Problem removing data dir %s.\n"
|
|
62
69
|
"Consider checking whether it's there "
|
|
63
|
-
"and remove it by hand
|
|
70
|
+
"and remove it by hand.\nError: %s"
|
|
64
71
|
% (_.config.user_data_dir, e)
|
|
65
72
|
)
|
|
66
73
|
break
|
|
67
74
|
time.sleep(0.12)
|
|
68
75
|
continue
|
|
69
|
-
logging.debug("Temp profile %s was removed." % _.config.user_data_dir)
|
|
70
76
|
|
|
71
77
|
|
|
72
78
|
class Browser:
|
|
@@ -940,10 +946,12 @@ class Browser:
|
|
|
940
946
|
logger.debug("Closed the connection using asyncio.run()")
|
|
941
947
|
except Exception:
|
|
942
948
|
pass
|
|
949
|
+
procs = []
|
|
943
950
|
for _ in range(3):
|
|
944
951
|
try:
|
|
945
952
|
if connection_id not in sb_config._closed_connection_ids:
|
|
946
953
|
self._process.terminate()
|
|
954
|
+
procs.append(psutil.Process(self._process.pid))
|
|
947
955
|
logger.debug(
|
|
948
956
|
"Terminated browser with pid %d successfully."
|
|
949
957
|
% self._process.pid
|
|
@@ -955,20 +963,33 @@ class Browser:
|
|
|
955
963
|
except (Exception,):
|
|
956
964
|
try:
|
|
957
965
|
self._process.kill()
|
|
966
|
+
procs.append(psutil.Process(self._process.pid))
|
|
958
967
|
logger.debug(
|
|
959
968
|
"Killed browser with pid %d successfully."
|
|
960
969
|
% self._process.pid
|
|
961
970
|
)
|
|
971
|
+
if connection_id:
|
|
972
|
+
sb_config._closed_connection_ids.append(connection_id)
|
|
973
|
+
close_success = True
|
|
962
974
|
break
|
|
963
975
|
except (Exception,):
|
|
964
976
|
try:
|
|
965
|
-
if hasattr(self, "
|
|
977
|
+
if hasattr(self, "_process_pid") and self._process_pid:
|
|
966
978
|
os.kill(self._process_pid, 15)
|
|
979
|
+
try:
|
|
980
|
+
procs.append(psutil.Process(self._process_pid))
|
|
981
|
+
except Exception:
|
|
982
|
+
pass
|
|
967
983
|
logger.debug(
|
|
968
984
|
"Killed browser with pid %d "
|
|
969
985
|
"using signal 15 successfully."
|
|
970
|
-
% self.
|
|
986
|
+
% self._process_pid
|
|
971
987
|
)
|
|
988
|
+
if connection_id:
|
|
989
|
+
sb_config._closed_connection_ids.append(
|
|
990
|
+
connection_id
|
|
991
|
+
)
|
|
992
|
+
close_success = True
|
|
972
993
|
break
|
|
973
994
|
except (TypeError,):
|
|
974
995
|
logger.info("TypeError", exc_info=True)
|
|
@@ -976,16 +997,33 @@ class Browser:
|
|
|
976
997
|
except (PermissionError,):
|
|
977
998
|
logger.info(
|
|
978
999
|
"Browser already stopped, "
|
|
979
|
-
"or no permission to kill.
|
|
1000
|
+
"or no permission to kill."
|
|
980
1001
|
)
|
|
981
1002
|
pass
|
|
982
1003
|
except (ProcessLookupError,):
|
|
983
1004
|
logger.info("ProcessLookupError")
|
|
984
|
-
|
|
1005
|
+
break
|
|
985
1006
|
except (Exception,):
|
|
986
1007
|
raise
|
|
987
|
-
|
|
988
|
-
|
|
1008
|
+
self._process = None
|
|
1009
|
+
self._process_pid = None
|
|
1010
|
+
if procs:
|
|
1011
|
+
with suppress(Exception):
|
|
1012
|
+
gone, alive = psutil.wait_procs(procs, timeout=0.8)
|
|
1013
|
+
for p in gone:
|
|
1014
|
+
logger.debug("Process has been terminated: %d." % p.pid)
|
|
1015
|
+
for p in alive:
|
|
1016
|
+
logger.debug("Process is still alive: %d." % p.pid)
|
|
1017
|
+
if self.config.user_data_dir and not self.config.uses_custom_data_dir:
|
|
1018
|
+
for _ in range(3):
|
|
1019
|
+
try:
|
|
1020
|
+
time.sleep(0.005)
|
|
1021
|
+
if os.path.exists(self.config.user_data_dir):
|
|
1022
|
+
time.sleep(0.005)
|
|
1023
|
+
shutil.rmtree(self.config.user_data_dir)
|
|
1024
|
+
break
|
|
1025
|
+
except Exception:
|
|
1026
|
+
time.sleep(0.12)
|
|
989
1027
|
if (
|
|
990
1028
|
hasattr(sb_config, "_xvfb_users")
|
|
991
1029
|
and isinstance(sb_config._xvfb_users, int)
|
|
@@ -1025,18 +1063,33 @@ class Browser:
|
|
|
1025
1063
|
def silence_pipe_destruction_errors(unraisable):
|
|
1026
1064
|
exc_type = unraisable.exc_type
|
|
1027
1065
|
exc_value = unraisable.exc_value
|
|
1066
|
+
exc_value_str = str(exc_value) if exc_value else ""
|
|
1028
1067
|
if (
|
|
1029
1068
|
exc_type is ValueError
|
|
1030
|
-
and "I/O operation on closed pipe" in
|
|
1069
|
+
and "I/O operation on closed pipe" in exc_value_str
|
|
1070
|
+
):
|
|
1071
|
+
return
|
|
1072
|
+
if (
|
|
1073
|
+
exc_type is RuntimeError
|
|
1074
|
+
and "Event loop is closed" in exc_value_str
|
|
1031
1075
|
):
|
|
1032
1076
|
return
|
|
1033
1077
|
default_unraisablehook(unraisable)
|
|
1034
1078
|
|
|
1035
1079
|
sys.unraisablehook = silence_pipe_destruction_errors
|
|
1036
1080
|
# Automatically restore Python's default behavior at program exit
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1081
|
+
# (Looks like this isn't needed, but I'm saving it for reference)
|
|
1082
|
+
# atexit.register(
|
|
1083
|
+
# lambda: setattr(
|
|
1084
|
+
# sys, "unraisablehook", default_unraisablehook
|
|
1085
|
+
# )
|
|
1086
|
+
# )
|
|
1087
|
+
|
|
1088
|
+
# Custom user_data_dirs should be saved while temp ones are removed
|
|
1089
|
+
if os.path.exists("%s" % self.config.user_data_dir):
|
|
1090
|
+
logger.debug("%s still exists." % self.config.user_data_dir)
|
|
1091
|
+
else:
|
|
1092
|
+
logger.debug("%s was removed." % self.config.user_data_dir)
|
|
1040
1093
|
|
|
1041
1094
|
def quit(self):
|
|
1042
1095
|
self.stop()
|
|
@@ -527,7 +527,11 @@ async def start(
|
|
|
527
527
|
print(" Using default Chrome browser instead!")
|
|
528
528
|
bin_loc = None
|
|
529
529
|
browser_executable_path = bin_loc
|
|
530
|
-
elif
|
|
530
|
+
elif (
|
|
531
|
+
use_chromium
|
|
532
|
+
or "--use-chromium" in arg_join
|
|
533
|
+
or "--chromium" in sys_argv
|
|
534
|
+
):
|
|
531
535
|
browser_executable_path = "_chromium_"
|
|
532
536
|
elif cft or "--cft" in arg_join:
|
|
533
537
|
browser_executable_path = "_cft_"
|
|
@@ -764,14 +768,8 @@ async def start_async(*args, **kwargs) -> Browser:
|
|
|
764
768
|
|
|
765
769
|
|
|
766
770
|
def start_sync(*args, **kwargs) -> Browser:
|
|
767
|
-
loop = None
|
|
768
|
-
if (
|
|
769
|
-
"loop" in kwargs
|
|
770
|
-
and kwargs["loop"]
|
|
771
|
-
and hasattr(kwargs["loop"], "create_task")
|
|
772
|
-
):
|
|
773
|
-
loop = kwargs["loop"]
|
|
774
|
-
else:
|
|
771
|
+
loop = kwargs.pop("loop", None)
|
|
772
|
+
if not (loop and hasattr(loop, "create_task")):
|
|
775
773
|
loop = asyncio.new_event_loop()
|
|
776
774
|
return loop.run_until_complete(start(*args, **kwargs))
|
|
777
775
|
|
|
@@ -25,7 +25,7 @@ __all__ = [
|
|
|
25
25
|
]
|
|
26
26
|
|
|
27
27
|
logger = logging.getLogger(__name__)
|
|
28
|
-
is_posix = sys.platform.startswith(("darwin", "cygwin", "linux"
|
|
28
|
+
is_posix = sys.platform.startswith(("darwin", "cygwin", "linux"))
|
|
29
29
|
|
|
30
30
|
PathLike = Union[str, pathlib.Path]
|
|
31
31
|
AUTO = None
|
|
@@ -195,6 +195,8 @@ class Config:
|
|
|
195
195
|
f"Defaulting to regular Chrome!"
|
|
196
196
|
)
|
|
197
197
|
browser_executable_path = find_chrome_executable()
|
|
198
|
+
elif "Chromium.app" in browser_executable_path:
|
|
199
|
+
mock_keychain = True
|
|
198
200
|
self._browser_args = browser_args
|
|
199
201
|
self.browser_executable_path = browser_executable_path
|
|
200
202
|
self.headless = headless
|
|
@@ -372,12 +372,17 @@ class Element:
|
|
|
372
372
|
arguments = [cdp.runtime.CallArgument(
|
|
373
373
|
object_id=self._remote_object.object_id
|
|
374
374
|
)]
|
|
375
|
-
|
|
375
|
+
# The next part may be getting detected. Comment-out for now.
|
|
376
|
+
'''script1 = 'sessionStorage.getItem("pxsid") !== null;'
|
|
377
|
+
script2 = 'sessionStorage.getItem("PIM-SESSION-ID") !== null;'
|
|
376
378
|
using_px = True
|
|
379
|
+
using_pim = True
|
|
377
380
|
with suppress(Exception):
|
|
378
|
-
using_px = await self.tab.evaluate(
|
|
379
|
-
|
|
380
|
-
await self.
|
|
381
|
+
using_px = await self.tab.evaluate(script1)
|
|
382
|
+
with suppress(Exception):
|
|
383
|
+
using_pim = await self.tab.evaluate(script2)
|
|
384
|
+
if not using_px and not using_pim:
|
|
385
|
+
await self.flash_async(0.25)'''
|
|
381
386
|
await self._tab.send(
|
|
382
387
|
cdp.runtime.call_function_on(
|
|
383
388
|
"(el) => el.click()",
|
|
@@ -506,12 +511,17 @@ class Element:
|
|
|
506
511
|
logger.warning("Could not calculate box model for %s", self)
|
|
507
512
|
return
|
|
508
513
|
logger.debug("Clicking on location: %.2f, %.2f" % center)
|
|
509
|
-
|
|
514
|
+
# The next part may be getting detected. Comment-out for now.
|
|
515
|
+
'''script1 = 'sessionStorage.getItem("pxsid") !== null;'
|
|
516
|
+
script2 = 'sessionStorage.getItem("PIM-SESSION-ID") !== null;'
|
|
510
517
|
using_px = True
|
|
518
|
+
using_pim = True
|
|
519
|
+
with suppress(Exception):
|
|
520
|
+
using_px = await self.tab.evaluate(script1)
|
|
511
521
|
with suppress(Exception):
|
|
512
|
-
|
|
513
|
-
if not using_px:
|
|
514
|
-
asyncio.create_task(self.flash_async(0.25))
|
|
522
|
+
using_pim = await self.tab.evaluate(script2)
|
|
523
|
+
if not using_px and not using_pim:
|
|
524
|
+
asyncio.create_task(self.flash_async(0.25))'''
|
|
515
525
|
asyncio.create_task(
|
|
516
526
|
self._tab.send(
|
|
517
527
|
cdp.input_.dispatch_mouse_event(
|
|
@@ -570,11 +580,15 @@ class Element:
|
|
|
570
580
|
logger.debug("Clicking on location: %.2f, %.2f" % center_pos)
|
|
571
581
|
else:
|
|
572
582
|
logger.debug("Clicking on location: %.2f, %.2f" % (x_pos, y_pos))
|
|
573
|
-
|
|
583
|
+
script1 = 'sessionStorage.getItem("pxsid") !== null;'
|
|
584
|
+
script2 = 'sessionStorage.getItem("PIM-SESSION-ID") !== null;'
|
|
574
585
|
using_px = True
|
|
586
|
+
using_pim = True
|
|
587
|
+
with suppress(Exception):
|
|
588
|
+
using_px = await self.tab.evaluate(script1)
|
|
575
589
|
with suppress(Exception):
|
|
576
|
-
|
|
577
|
-
if not using_px:
|
|
590
|
+
using_pim = await self.tab.evaluate(script2)
|
|
591
|
+
if not using_px and not using_pim:
|
|
578
592
|
asyncio.create_task(
|
|
579
593
|
self.flash_async(
|
|
580
594
|
x_offset=x_offset - (width / 2),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.50.
|
|
3
|
+
Version: 4.50.3
|
|
4
4
|
Summary: SeleniumBase is a framework for web crawling, scraping, and testing. Supports pytest. CDP Mode adds stealth. Includes many tools.
|
|
5
5
|
Home-page: https://github.com/seleniumbase/SeleniumBase
|
|
6
6
|
Author: Michael Mintz
|
|
@@ -117,7 +117,7 @@ Requires-Dist: iniconfig==2.1.0; python_version < "3.10"
|
|
|
117
117
|
Requires-Dist: iniconfig==2.3.0; python_version >= "3.10"
|
|
118
118
|
Requires-Dist: pluggy==1.6.0
|
|
119
119
|
Requires-Dist: pytest==8.4.2; python_version < "3.11"
|
|
120
|
-
Requires-Dist: pytest==9.1.
|
|
120
|
+
Requires-Dist: pytest==9.1.1; python_version >= "3.11"
|
|
121
121
|
Requires-Dist: pytest-html==4.0.2
|
|
122
122
|
Requires-Dist: pytest-metadata==3.1.1
|
|
123
123
|
Requires-Dist: pytest-ordering==0.6
|
|
@@ -141,7 +141,7 @@ Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
|
|
|
141
141
|
Requires-Dist: allure-behave>=2.16.0; extra == "allure"
|
|
142
142
|
Provides-Extra: coverage
|
|
143
143
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
144
|
-
Requires-Dist: coverage>=7.14.
|
|
144
|
+
Requires-Dist: coverage>=7.14.3; python_version >= "3.10" and extra == "coverage"
|
|
145
145
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
146
146
|
Provides-Extra: flake8
|
|
147
147
|
Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
@@ -335,7 +335,7 @@ for element in elements:
|
|
|
335
335
|
<p>💡 You can set the Chromium browser to use via command line parameters:</p>
|
|
336
336
|
|
|
337
337
|
```zsh
|
|
338
|
-
python SCRIPT.py --
|
|
338
|
+
python SCRIPT.py --chromium # Use the unbranded Chromium browser
|
|
339
339
|
python SCRIPT.py --cft # Use Chrome-for-testing
|
|
340
340
|
python SCRIPT.py --edge # Use Microsoft Edge
|
|
341
341
|
python SCRIPT.py --brave # Use Brave browser
|
|
@@ -85,7 +85,7 @@ pytest-rerunfailures==16.3
|
|
|
85
85
|
markdown-it-py==4.2.0
|
|
86
86
|
|
|
87
87
|
[:python_version >= "3.11"]
|
|
88
|
-
pytest==9.1.
|
|
88
|
+
pytest==9.1.1
|
|
89
89
|
|
|
90
90
|
[allure]
|
|
91
91
|
allure-pytest>=2.16.0
|
|
@@ -99,7 +99,7 @@ pytest-cov>=7.1.0
|
|
|
99
99
|
coverage>=7.10.7
|
|
100
100
|
|
|
101
101
|
[coverage:python_version >= "3.10"]
|
|
102
|
-
coverage>=7.14.
|
|
102
|
+
coverage>=7.14.3
|
|
103
103
|
|
|
104
104
|
[flake8]
|
|
105
105
|
flake8==7.3.0
|
|
@@ -220,7 +220,7 @@ setup(
|
|
|
220
220
|
'iniconfig==2.3.0;python_version>="3.10"',
|
|
221
221
|
'pluggy==1.6.0',
|
|
222
222
|
'pytest==8.4.2;python_version<"3.11"',
|
|
223
|
-
'pytest==9.1.
|
|
223
|
+
'pytest==9.1.1;python_version>="3.11"',
|
|
224
224
|
'pytest-html==4.0.2', # Newer ones had issues
|
|
225
225
|
'pytest-metadata==3.1.1',
|
|
226
226
|
'pytest-ordering==0.6',
|
|
@@ -252,7 +252,7 @@ setup(
|
|
|
252
252
|
# Usage: coverage run -m pytest; coverage html; coverage report
|
|
253
253
|
"coverage": [
|
|
254
254
|
'coverage>=7.10.7;python_version<"3.10"',
|
|
255
|
-
'coverage>=7.14.
|
|
255
|
+
'coverage>=7.14.3;python_version>="3.10"',
|
|
256
256
|
'pytest-cov>=7.1.0',
|
|
257
257
|
],
|
|
258
258
|
# pip install -e .[flake8]
|
|
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.50.1 → seleniumbase-4.50.3}/seleniumbase/drivers/chromium_drivers/__init__.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
|
|
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.50.1 → seleniumbase-4.50.3}/seleniumbase/undetected/cdp_driver/_contradict.py
RENAMED
|
File without changes
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/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
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
|
File without changes
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat
RENAMED
|
File without changes
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
|
File without changes
|
|
File without changes
|
{seleniumbase-4.50.1 → seleniumbase-4.50.3}/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
|