seleniumbase 4.51.0__tar.gz → 4.51.2__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.51.0/seleniumbase.egg-info → seleniumbase-4.51.2}/PKG-INFO +3 -4
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/README.md +0 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/pyproject.toml +0 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/requirements.txt +2 -2
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/behave/behave_sb.py +1 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/config/proxy_list.py +3 -5
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_mkrec.py +0 -5
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_recorder.py +0 -15
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/browser_launcher.py +5 -21
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/detect_b_ver.py +0 -45
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/sb_cdp.py +9 -4
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/base_case.py +13 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/constants.py +0 -9
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/page_utils.py +1 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/xpath_to_css.py +19 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/driver_manager.py +2 -24
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/pytest_plugin.py +3 -42
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/sb_manager.py +2 -22
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/selenium_plugin.py +1 -29
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/browser.py +2 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/cdp_util.py +3 -5
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/config.py +5 -6
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/tab.py +1 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2/seleniumbase.egg-info}/PKG-INFO +3 -4
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase.egg-info/SOURCES.txt +0 -1
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase.egg-info/requires.txt +2 -2
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/setup.py +2 -3
- seleniumbase-4.51.0/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/.gitignore +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/LICENSE +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/MANIFEST.in +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/install.sh +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/pytest.ini +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/sbase/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/sbase/__main__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/sbase/steps.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/nest_asyncio.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/atlas_drivers → seleniumbase-4.51.2/seleniumbase/drivers/brave_drivers}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/brave_drivers → seleniumbase-4.51.2/seleniumbase/drivers/cft_drivers}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/cft_drivers → seleniumbase-4.51.2/seleniumbase/drivers/chromium_drivers}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/chromium_drivers → seleniumbase-4.51.2/seleniumbase/drivers/chs_drivers}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/chs_drivers → seleniumbase-4.51.2/seleniumbase/drivers/comet_drivers}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/comet_drivers → seleniumbase-4.51.2/seleniumbase/drivers/opera_drivers}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/drivers/opera_drivers → seleniumbase-4.51.2/seleniumbase/extensions}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.51.0/seleniumbase/extensions → seleniumbase-4.51.2/seleniumbase/fixtures}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/fixtures → seleniumbase-4.51.2/seleniumbase/js_code}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/js_code → seleniumbase-4.51.2/seleniumbase/masterqa}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/masterqa → seleniumbase-4.51.2/seleniumbase/plugins}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/plugins → seleniumbase-4.51.2/seleniumbase/resources}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/resources → seleniumbase-4.51.2/seleniumbase/utilities}/__init__.py +0 -0
- {seleniumbase-4.51.0/seleniumbase/utilities → seleniumbase-4.51.2/seleniumbase/utilities/selenium_grid}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.51.0/seleniumbase/utilities/selenium_grid → seleniumbase-4.51.2/seleniumbase/utilities/selenium_ide}/__init__.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/setup.cfg +0 -0
- {seleniumbase-4.51.0 → seleniumbase-4.51.2}/virtualenv_install.sh +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: seleniumbase
|
|
3
|
-
Version: 4.51.
|
|
3
|
+
Version: 4.51.2
|
|
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
|
|
@@ -71,7 +71,7 @@ Requires-Dist: exceptiongroup>=1.3.1
|
|
|
71
71
|
Requires-Dist: websockets~=15.0.1; python_version < "3.10"
|
|
72
72
|
Requires-Dist: websockets>=16.1; python_version >= "3.10"
|
|
73
73
|
Requires-Dist: filelock~=3.19.1; python_version < "3.10"
|
|
74
|
-
Requires-Dist: filelock>=3.
|
|
74
|
+
Requires-Dist: filelock>=3.30.3; python_version >= "3.10"
|
|
75
75
|
Requires-Dist: fasteners>=0.20
|
|
76
76
|
Requires-Dist: mycdp>=1.4.0
|
|
77
77
|
Requires-Dist: pynose>=1.5.5
|
|
@@ -142,7 +142,7 @@ Requires-Dist: allure-python-commons>=2.16.0; extra == "allure"
|
|
|
142
142
|
Requires-Dist: allure-behave>=2.16.0; extra == "allure"
|
|
143
143
|
Provides-Extra: coverage
|
|
144
144
|
Requires-Dist: coverage>=7.10.7; python_version < "3.10" and extra == "coverage"
|
|
145
|
-
Requires-Dist: coverage>=7.15.
|
|
145
|
+
Requires-Dist: coverage>=7.15.2; python_version >= "3.10" and extra == "coverage"
|
|
146
146
|
Requires-Dist: pytest-cov>=7.1.0; extra == "coverage"
|
|
147
147
|
Provides-Extra: flake8
|
|
148
148
|
Requires-Dist: flake8==7.3.0; extra == "flake8"
|
|
@@ -950,7 +950,6 @@ pytest test_coffee_cart.py --trace
|
|
|
950
950
|
--opera # (Shortcut for "--browser=opera".)
|
|
951
951
|
--brave # (Shortcut for "--browser=brave".)
|
|
952
952
|
--comet # (Shortcut for "--browser=comet".)
|
|
953
|
-
--atlas # (Shortcut for "--browser=atlas".)
|
|
954
953
|
--chromium # (Shortcut for using base `Chromium`)
|
|
955
954
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
956
955
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
@@ -762,7 +762,6 @@ pytest test_coffee_cart.py --trace
|
|
|
762
762
|
--opera # (Shortcut for "--browser=opera".)
|
|
763
763
|
--brave # (Shortcut for "--browser=brave".)
|
|
764
764
|
--comet # (Shortcut for "--browser=comet".)
|
|
765
|
-
--atlas # (Shortcut for "--browser=atlas".)
|
|
766
765
|
--chromium # (Shortcut for using base `Chromium`)
|
|
767
766
|
--settings-file=FILE # (Override default SeleniumBase settings.)
|
|
768
767
|
--env=ENV # (Set the test env. Access with "self.env" in tests.)
|
|
@@ -46,7 +46,6 @@ packages = [
|
|
|
46
46
|
"seleniumbase.drivers.opera_drivers",
|
|
47
47
|
"seleniumbase.drivers.brave_drivers",
|
|
48
48
|
"seleniumbase.drivers.comet_drivers",
|
|
49
|
-
"seleniumbase.drivers.atlas_drivers",
|
|
50
49
|
"seleniumbase.drivers.chromium_drivers",
|
|
51
50
|
"seleniumbase.extensions",
|
|
52
51
|
"seleniumbase.fixtures",
|
|
@@ -10,7 +10,7 @@ exceptiongroup>=1.3.1
|
|
|
10
10
|
websockets~=15.0.1;python_version<"3.10"
|
|
11
11
|
websockets>=16.1;python_version>="3.10"
|
|
12
12
|
filelock~=3.19.1;python_version<"3.10"
|
|
13
|
-
filelock>=3.
|
|
13
|
+
filelock>=3.30.3;python_version>="3.10"
|
|
14
14
|
fasteners>=0.20
|
|
15
15
|
mycdp>=1.4.0
|
|
16
16
|
pynose>=1.5.5
|
|
@@ -80,7 +80,7 @@ rich>=15.0.0,<16
|
|
|
80
80
|
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)
|
|
81
81
|
|
|
82
82
|
coverage>=7.10.7;python_version<"3.10"
|
|
83
|
-
coverage>=7.15.
|
|
83
|
+
coverage>=7.15.2;python_version>="3.10"
|
|
84
84
|
pytest-cov>=7.1.0
|
|
85
85
|
flake8==7.3.0
|
|
86
86
|
mccabe==0.7.0
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# seleniumbase package
|
|
2
|
-
__version__ = "4.51.
|
|
2
|
+
__version__ = "4.51.2"
|
|
@@ -894,7 +894,7 @@ def get_configured_sb(context):
|
|
|
894
894
|
"\nOnly ONE default browser is allowed!\n"
|
|
895
895
|
"%s browsers were selected: %s" % (len(browsers), browsers)
|
|
896
896
|
)
|
|
897
|
-
if sb.browser in ["opera", "brave", "comet"
|
|
897
|
+
if sb.browser in ["opera", "brave", "comet"]:
|
|
898
898
|
bin_loc = detect_b_ver.get_binary_location(sb.browser)
|
|
899
899
|
if bin_loc and os.path.exists(bin_loc):
|
|
900
900
|
sb_config._cdp_browser = sb.browser
|
|
@@ -16,16 +16,14 @@ Example proxies in PROXY_LIST below are not guaranteed to be active or secure.
|
|
|
16
16
|
If you don't already have a proxy server to connect to,
|
|
17
17
|
you can try finding one from one of following sites:
|
|
18
18
|
* https://www.sslproxies.org/
|
|
19
|
-
* https://bit.ly/36GtZa1
|
|
20
19
|
* https://www.us-proxy.org/
|
|
21
20
|
* https://hidemy.name/en/proxy-list/
|
|
22
|
-
* http://free-proxy.cz/en/proxylist/country/all/https/ping/all
|
|
23
21
|
"""
|
|
24
22
|
|
|
25
23
|
PROXY_LIST = {
|
|
26
|
-
"example1": "
|
|
27
|
-
"example2": "
|
|
28
|
-
"example3": "
|
|
24
|
+
"example1": "65.109.191.98:3080", # (Example) - set your own proxy here
|
|
25
|
+
"example2": "157.254.194.57:1080", # (Example)
|
|
26
|
+
"example3": "socks4://142.54.228.193:4145", # (Example)
|
|
29
27
|
"proxy1": None,
|
|
30
28
|
"proxy2": None,
|
|
31
29
|
"proxy3": None,
|
|
@@ -87,7 +87,6 @@ def main():
|
|
|
87
87
|
use_opera = False
|
|
88
88
|
use_brave = False
|
|
89
89
|
use_comet = False
|
|
90
|
-
use_atlas = False
|
|
91
90
|
use_chromium = False
|
|
92
91
|
use_uc = False
|
|
93
92
|
esc_end = False
|
|
@@ -151,8 +150,6 @@ def main():
|
|
|
151
150
|
use_brave = True
|
|
152
151
|
elif option.lower() == "--comet":
|
|
153
152
|
use_comet = True
|
|
154
|
-
elif option.lower() == "--atlas":
|
|
155
|
-
use_atlas = True
|
|
156
153
|
elif option.lower() == "--use-chromium":
|
|
157
154
|
use_chromium = True
|
|
158
155
|
elif option.lower() == "--ee":
|
|
@@ -302,8 +299,6 @@ def main():
|
|
|
302
299
|
run_cmd += " --brave"
|
|
303
300
|
elif use_comet:
|
|
304
301
|
run_cmd += " --comet"
|
|
305
|
-
elif use_atlas:
|
|
306
|
-
run_cmd += " --atlas"
|
|
307
302
|
elif use_chromium:
|
|
308
303
|
run_cmd += " --use-chromium"
|
|
309
304
|
if force_gui:
|
|
@@ -166,8 +166,6 @@ def do_recording(
|
|
|
166
166
|
command += " --brave"
|
|
167
167
|
elif "comet" in brx.lower():
|
|
168
168
|
command += " --comet"
|
|
169
|
-
elif "atlas" in brx.lower():
|
|
170
|
-
command += " --atlas"
|
|
171
169
|
elif "chromium" in brx.lower():
|
|
172
170
|
command += " --use-chromium"
|
|
173
171
|
if ucb:
|
|
@@ -213,8 +211,6 @@ def do_playback(file_name, brx, window, demo_mode=False):
|
|
|
213
211
|
command += " --brave"
|
|
214
212
|
elif "comet" in brx.lower():
|
|
215
213
|
command += " --comet"
|
|
216
|
-
elif "atlas" in brx.lower():
|
|
217
|
-
command += " --atlas"
|
|
218
214
|
elif "chromium" in brx.lower():
|
|
219
215
|
command += " --use-chromium"
|
|
220
216
|
if demo_mode:
|
|
@@ -265,7 +261,6 @@ def create_tkinter_gui():
|
|
|
265
261
|
use_behave = False
|
|
266
262
|
use_sb_mgr = False
|
|
267
263
|
use_sb_cdp = False
|
|
268
|
-
use_atlas = False
|
|
269
264
|
command_args = sys.argv[2:]
|
|
270
265
|
if (
|
|
271
266
|
"--uc" in command_args
|
|
@@ -285,8 +280,6 @@ def create_tkinter_gui():
|
|
|
285
280
|
use_sb_mgr = True
|
|
286
281
|
if "--rec-sb-cdp" in command_args:
|
|
287
282
|
use_sb_cdp = True
|
|
288
|
-
if "--atlas" in command_args:
|
|
289
|
-
use_atlas = True
|
|
290
283
|
|
|
291
284
|
tk.Label(window, text="\nSelect a web browser to use:").pack()
|
|
292
285
|
br_count = 2
|
|
@@ -318,12 +311,6 @@ def create_tkinter_gui():
|
|
|
318
311
|
options_list.append("Comet Browser")
|
|
319
312
|
br_order["comet"] = br_count
|
|
320
313
|
br_count += 1
|
|
321
|
-
if use_atlas:
|
|
322
|
-
with suppress(Exception):
|
|
323
|
-
if os.path.exists(detect_b_ver.get_binary_location("atlas")):
|
|
324
|
-
options_list.append("Atlas Browser")
|
|
325
|
-
br_order["atlas"] = br_count
|
|
326
|
-
br_count += 1
|
|
327
314
|
brx = tk.StringVar(window)
|
|
328
315
|
if "--use-chromium" in command_args or "--chromium" in command_args:
|
|
329
316
|
brx.set(options_list[1])
|
|
@@ -339,8 +326,6 @@ def create_tkinter_gui():
|
|
|
339
326
|
brx.set(options_list[br_order["brave"]])
|
|
340
327
|
elif "--comet" in command_args and "comet" in br_order:
|
|
341
328
|
brx.set(options_list[br_order["comet"]])
|
|
342
|
-
elif "--atlas" in command_args and "atlas" in br_order:
|
|
343
|
-
brx.set(options_list[br_order["atlas"]])
|
|
344
329
|
else:
|
|
345
330
|
brx.set(options_list[0])
|
|
346
331
|
question_menu = tk.OptionMenu(window, brx, *options_list)
|
|
@@ -27,7 +27,6 @@ from seleniumbase.drivers import chs_drivers # chrome-headless-shell
|
|
|
27
27
|
from seleniumbase.drivers import opera_drivers # still uses chromedriver
|
|
28
28
|
from seleniumbase.drivers import brave_drivers # still uses chromedriver
|
|
29
29
|
from seleniumbase.drivers import comet_drivers # still uses chromedriver
|
|
30
|
-
from seleniumbase.drivers import atlas_drivers # still uses chromedriver
|
|
31
30
|
from seleniumbase.drivers import chromium_drivers # still uses chromedriver
|
|
32
31
|
from seleniumbase import extensions # browser extensions storage folder
|
|
33
32
|
from seleniumbase.config import settings
|
|
@@ -48,7 +47,6 @@ DRIVER_DIR_CHS = os.path.dirname(os.path.realpath(chs_drivers.__file__))
|
|
|
48
47
|
DRIVER_DIR_OPERA = os.path.dirname(os.path.realpath(opera_drivers.__file__))
|
|
49
48
|
DRIVER_DIR_BRAVE = os.path.dirname(os.path.realpath(brave_drivers.__file__))
|
|
50
49
|
DRIVER_DIR_COMET = os.path.dirname(os.path.realpath(comet_drivers.__file__))
|
|
51
|
-
DRIVER_DIR_ATLAS = os.path.dirname(os.path.realpath(atlas_drivers.__file__))
|
|
52
50
|
DRIVER_DIR_CHROMIUM = os.path.dirname(
|
|
53
51
|
os.path.realpath(chromium_drivers.__file__)
|
|
54
52
|
)
|
|
@@ -590,7 +588,7 @@ def uc_open_with_reconnect(driver, url, reconnect_time=None):
|
|
|
590
588
|
"""Open a url, disconnect chromedriver, wait, and reconnect."""
|
|
591
589
|
if (
|
|
592
590
|
hasattr(sb_config, "_cdp_browser")
|
|
593
|
-
and sb_config._cdp_browser in ["comet", "opera"
|
|
591
|
+
and sb_config._cdp_browser in ["comet", "opera"]
|
|
594
592
|
):
|
|
595
593
|
if not __is_cdp_swap_needed(driver):
|
|
596
594
|
if not driver.current_url.startswith(
|
|
@@ -2410,11 +2408,10 @@ def _set_chrome_options(
|
|
|
2410
2408
|
}
|
|
2411
2409
|
app_state = "printing.print_preview_sticky_settings.appState"
|
|
2412
2410
|
prefs[app_state] = json.dumps(pdf_settings)
|
|
2413
|
-
|
|
2414
|
-
|
|
2415
|
-
|
|
2416
|
-
|
|
2417
|
-
prefs["webrtc.nonproxied_udp_enabled"] = False
|
|
2411
|
+
# Implementation of https://stackoverflow.com/q/65705775/7058266
|
|
2412
|
+
prefs["webrtc.ip_handling_policy"] = "disable_non_proxied_udp"
|
|
2413
|
+
prefs["webrtc.multiple_routes_enabled"] = False
|
|
2414
|
+
prefs["webrtc.nonproxied_udp_enabled"] = False
|
|
2418
2415
|
chrome_options.add_experimental_option("prefs", prefs)
|
|
2419
2416
|
if enable_sync:
|
|
2420
2417
|
chrome_options.add_experimental_option(
|
|
@@ -2512,8 +2509,6 @@ def _set_chrome_options(
|
|
|
2512
2509
|
and (
|
|
2513
2510
|
binary_location.lower().endswith("comet")
|
|
2514
2511
|
or binary_location.lower().endswith("comet.exe")
|
|
2515
|
-
or binary_location.lower().endswith("atlas")
|
|
2516
|
-
or binary_location.lower().endswith("atlas.exe")
|
|
2517
2512
|
)
|
|
2518
2513
|
):
|
|
2519
2514
|
# AI browsers don't like Incognito / Guest Mode
|
|
@@ -3116,9 +3111,6 @@ def get_driver(
|
|
|
3116
3111
|
elif _special_binary_exists(binary_location, "comet"):
|
|
3117
3112
|
driver_dir = DRIVER_DIR_COMET
|
|
3118
3113
|
sb_config._cdp_browser = "comet"
|
|
3119
|
-
elif _special_binary_exists(binary_location, "atlas"):
|
|
3120
|
-
driver_dir = DRIVER_DIR_ATLAS
|
|
3121
|
-
sb_config._cdp_browser = "atlas"
|
|
3122
3114
|
if (
|
|
3123
3115
|
hasattr(sb_config, "settings")
|
|
3124
3116
|
and getattr(sb_config.settings, "NEW_DRIVER_DIR", None)
|
|
@@ -4135,9 +4127,6 @@ def get_local_driver(
|
|
|
4135
4127
|
elif _special_binary_exists(binary_location, "comet"):
|
|
4136
4128
|
special_chrome = True
|
|
4137
4129
|
driver_dir = DRIVER_DIR_COMET
|
|
4138
|
-
elif _special_binary_exists(binary_location, "atlas"):
|
|
4139
|
-
special_chrome = True
|
|
4140
|
-
driver_dir = DRIVER_DIR_ATLAS
|
|
4141
4130
|
if (
|
|
4142
4131
|
hasattr(sb_config, "settings")
|
|
4143
4132
|
and getattr(sb_config.settings, "NEW_DRIVER_DIR", None)
|
|
@@ -4973,11 +4962,6 @@ def get_local_driver(
|
|
|
4973
4962
|
local_chromedriver = DRIVER_DIR_COMET + "/chromedriver"
|
|
4974
4963
|
if IS_WINDOWS:
|
|
4975
4964
|
local_chromedriver = DRIVER_DIR_COMET + "/chromedriver.exe"
|
|
4976
|
-
if _special_binary_exists(binary_location, "atlas"):
|
|
4977
|
-
set_chromium = "atlas"
|
|
4978
|
-
local_chromedriver = DRIVER_DIR_ATLAS + "/chromedriver"
|
|
4979
|
-
if IS_WINDOWS:
|
|
4980
|
-
local_chromedriver = DRIVER_DIR_ATLAS + "/chromedriver.exe"
|
|
4981
4965
|
try:
|
|
4982
4966
|
chrome_options = _set_chrome_options(
|
|
4983
4967
|
browser_name,
|
|
@@ -43,7 +43,6 @@ class ChromeType(object):
|
|
|
43
43
|
OPERA = "opera"
|
|
44
44
|
BRAVE = "brave"
|
|
45
45
|
COMET = "comet"
|
|
46
|
-
ATLAS = "atlas"
|
|
47
46
|
|
|
48
47
|
|
|
49
48
|
PATTERN = {
|
|
@@ -225,14 +224,6 @@ def comet_on_linux_path(browser_type=None):
|
|
|
225
224
|
return "" # Comet Browser isn't supported on Linux yet
|
|
226
225
|
|
|
227
226
|
|
|
228
|
-
def atlas_on_linux_path(browser_type=None):
|
|
229
|
-
if browser_type and browser_type != ChromeType.ATLAS:
|
|
230
|
-
return ""
|
|
231
|
-
if os_name() != OSType.LINUX:
|
|
232
|
-
return ""
|
|
233
|
-
return "" # Atlas Browser isn't supported on Linux yet
|
|
234
|
-
|
|
235
|
-
|
|
236
227
|
def chrome_on_windows_path(browser_type=None):
|
|
237
228
|
if browser_type and browser_type != ChromeType.GOOGLE:
|
|
238
229
|
return ""
|
|
@@ -381,36 +372,6 @@ def comet_on_windows_path(browser_type=None):
|
|
|
381
372
|
return ""
|
|
382
373
|
|
|
383
374
|
|
|
384
|
-
def atlas_on_windows_path(browser_type=None):
|
|
385
|
-
if browser_type and browser_type != ChromeType.ATLAS:
|
|
386
|
-
return ""
|
|
387
|
-
if os_name() != OSType.WIN:
|
|
388
|
-
return ""
|
|
389
|
-
candidates = []
|
|
390
|
-
for item in map(
|
|
391
|
-
os.environ.get,
|
|
392
|
-
(
|
|
393
|
-
"LOCALAPPDATA",
|
|
394
|
-
"PROGRAMFILES",
|
|
395
|
-
"PROGRAMFILES(X86)",
|
|
396
|
-
"PROGRAMW6432",
|
|
397
|
-
),
|
|
398
|
-
):
|
|
399
|
-
for subitem in (
|
|
400
|
-
"OpenAI/Atlas/Application",
|
|
401
|
-
"Atlas/Application",
|
|
402
|
-
"Programs/Atlas",
|
|
403
|
-
):
|
|
404
|
-
try:
|
|
405
|
-
candidates.append(os.sep.join((item, subitem, "atlas.exe")))
|
|
406
|
-
except TypeError:
|
|
407
|
-
pass
|
|
408
|
-
for candidate in candidates:
|
|
409
|
-
if os.path.exists(candidate) and os.access(candidate, os.X_OK):
|
|
410
|
-
return os.path.normpath(candidate)
|
|
411
|
-
return ""
|
|
412
|
-
|
|
413
|
-
|
|
414
375
|
def windows_browser_apps_to_cmd(*apps):
|
|
415
376
|
"""Create analogue of browser --version command for windows."""
|
|
416
377
|
powershell = determine_powershell()
|
|
@@ -460,12 +421,6 @@ def get_binary_location(browser_type, chromium_ok=False):
|
|
|
460
421
|
r"/Contents/MacOS/Comet",
|
|
461
422
|
OSType.WIN: comet_on_windows_path(browser_type),
|
|
462
423
|
},
|
|
463
|
-
ChromeType.ATLAS: {
|
|
464
|
-
OSType.LINUX: atlas_on_linux_path(browser_type),
|
|
465
|
-
OSType.MAC: r"/Applications/ChatGPT Atlas.app"
|
|
466
|
-
r"/Contents/MacOS/ChatGPT Atlas",
|
|
467
|
-
OSType.WIN: atlas_on_windows_path(browser_type),
|
|
468
|
-
},
|
|
469
424
|
}
|
|
470
425
|
return cmd_mapping[browser_type][os_name()]
|
|
471
426
|
|
|
@@ -2219,7 +2219,8 @@ class CDPMethods():
|
|
|
2219
2219
|
self.loop.run_until_complete(self.page.wait(0.05))
|
|
2220
2220
|
if (
|
|
2221
2221
|
self.is_element_visible(
|
|
2222
|
-
'body > iframe[src*="/geo.captcha-delivery.com/captcha/"]'
|
|
2222
|
+
'body > iframe[src*="/geo.captcha-delivery.com/captcha/"], '
|
|
2223
|
+
'body > iframe[src*="/geo.captcha-delivery.com/interstitial/"]'
|
|
2223
2224
|
)
|
|
2224
2225
|
):
|
|
2225
2226
|
return True
|
|
@@ -2305,14 +2306,18 @@ class CDPMethods():
|
|
|
2305
2306
|
return False
|
|
2306
2307
|
|
|
2307
2308
|
def __gui_slide_datadome_captcha(self):
|
|
2308
|
-
iframe =
|
|
2309
|
+
iframe = (
|
|
2310
|
+
'body > iframe[src*="/geo.captcha-delivery.com/captcha/"], '
|
|
2311
|
+
'body > iframe[src*="/geo.captcha-delivery.com/interstitial/"]'
|
|
2312
|
+
)
|
|
2309
2313
|
if not self.is_element_visible(iframe):
|
|
2310
2314
|
return False
|
|
2311
2315
|
src = self.get_attribute(iframe, "src")
|
|
2312
2316
|
tab = self.get_active_tab()
|
|
2317
|
+
time.sleep(0.05)
|
|
2313
2318
|
self.open_new_tab(url=src)
|
|
2314
|
-
time.sleep(0.
|
|
2315
|
-
self.loop.run_until_complete(self.page.wait(0.
|
|
2319
|
+
time.sleep(0.42)
|
|
2320
|
+
self.loop.run_until_complete(self.page.wait(0.12))
|
|
2316
2321
|
time.sleep(0.25)
|
|
2317
2322
|
x1, y1 = self.get_gui_element_center("div.slider")
|
|
2318
2323
|
x2, y2 = self.get_gui_element_center("div.sliderTarget")
|
|
@@ -301,7 +301,15 @@ class BaseCase(unittest.TestCase):
|
|
|
301
301
|
shared_utils.check_if_time_limit_exceeded()
|
|
302
302
|
self._check_browser()
|
|
303
303
|
time.sleep(0.8)
|
|
304
|
-
|
|
304
|
+
try:
|
|
305
|
+
self.driver.get(url)
|
|
306
|
+
except Exception as e2:
|
|
307
|
+
if "ERR_CONNECTION_RESET" in e2.msg and self.proxy_string:
|
|
308
|
+
message = "ERR_CONNECTION_RESET: "
|
|
309
|
+
message += "Invalid proxy and/or Internet unreachable!"
|
|
310
|
+
raise ProxyConnectionException(message)
|
|
311
|
+
else:
|
|
312
|
+
raise
|
|
305
313
|
elif (
|
|
306
314
|
"ERR_INTERNET_DISCONNECTED" in e.msg
|
|
307
315
|
or "neterror?e=dnsNotFound" in e.msg
|
|
@@ -355,6 +363,10 @@ class BaseCase(unittest.TestCase):
|
|
|
355
363
|
logging.debug("Invalid session id. Will open new browser.")
|
|
356
364
|
self.driver = self.get_new_driver()
|
|
357
365
|
self.driver.get(url)
|
|
366
|
+
elif "ERR_TUNNEL_CONNECTION_FAILED" in e.msg and self.proxy_string:
|
|
367
|
+
message = "ERR_CONNECTION_RESET: "
|
|
368
|
+
message += "Bad proxy and/or Internet unreachable!"
|
|
369
|
+
raise ProxyConnectionException(message)
|
|
358
370
|
else:
|
|
359
371
|
raise
|
|
360
372
|
try:
|
|
@@ -382,7 +382,6 @@ class ValidBrowsers:
|
|
|
382
382
|
"opera",
|
|
383
383
|
"brave",
|
|
384
384
|
"comet",
|
|
385
|
-
"atlas",
|
|
386
385
|
]
|
|
387
386
|
|
|
388
387
|
|
|
@@ -392,7 +391,6 @@ class ChromiumSubs:
|
|
|
392
391
|
"opera",
|
|
393
392
|
"brave",
|
|
394
393
|
"comet",
|
|
395
|
-
"atlas",
|
|
396
394
|
]
|
|
397
395
|
|
|
398
396
|
|
|
@@ -415,9 +413,6 @@ class ValidBinaries:
|
|
|
415
413
|
"comet",
|
|
416
414
|
"comet-browser",
|
|
417
415
|
"comet-stable",
|
|
418
|
-
"atlas",
|
|
419
|
-
"atlas-browser",
|
|
420
|
-
"atlas-stable",
|
|
421
416
|
"chrome.exe", # WSL (Windows Subsystem for Linux)
|
|
422
417
|
"chromium.exe", # WSL (Windows Subsystem for Linux)
|
|
423
418
|
]
|
|
@@ -441,9 +436,6 @@ class ValidBinaries:
|
|
|
441
436
|
"Opera",
|
|
442
437
|
"Comet Browser",
|
|
443
438
|
"Comet",
|
|
444
|
-
"ChatGPT Atlas",
|
|
445
|
-
"Atlas Browser",
|
|
446
|
-
"Atlas",
|
|
447
439
|
]
|
|
448
440
|
valid_edge_binaries_on_macos = [
|
|
449
441
|
"Microsoft Edge",
|
|
@@ -455,7 +447,6 @@ class ValidBinaries:
|
|
|
455
447
|
"brave.exe",
|
|
456
448
|
"opera.exe",
|
|
457
449
|
"comet.exe",
|
|
458
|
-
"atlas.exe",
|
|
459
450
|
]
|
|
460
451
|
valid_edge_binaries_on_windows = [
|
|
461
452
|
"msedge.exe",
|
|
@@ -112,7 +112,7 @@ def looks_like_a_page_url(url):
|
|
|
112
112
|
"http:", "https:", "://", "about:", "blob:", "chrome:", "opera:",
|
|
113
113
|
"data:", "edge:", "file:", "view-source:", "chrome-search:",
|
|
114
114
|
"chrome-extension:", "chrome-untrusted:", "isolated-app:",
|
|
115
|
-
"chrome-devtools:", "devtools:", "brave:", "comet:"
|
|
115
|
+
"chrome-devtools:", "devtools:", "brave:", "comet:"
|
|
116
116
|
))
|
|
117
117
|
|
|
118
118
|
|
|
@@ -188,6 +188,25 @@ def convert_xpath_to_css(xpath):
|
|
|
188
188
|
s_val2 = data.group(5)
|
|
189
189
|
return '%s[%s="%s"][%s="%s"]' % (s_tag, s_atr1, s_val1, s_atr2, s_val2)
|
|
190
190
|
|
|
191
|
+
# Find instance of: //tag[@attribute1='value1' or @attribute2='value2']
|
|
192
|
+
# This tracks single/double quotes and maps them to comma-separated CSS.
|
|
193
|
+
data = re.match(
|
|
194
|
+
r"^\s*//([\w\-*]*)\s*\[\s*@?([\w\-:]+)\s*=\s*[\"']([^\"']*)[\"']\s+"
|
|
195
|
+
r"or\s+@?([\w\-:]+)\s*=\s*[\"']([^\"']*)[\"']\s*\]",
|
|
196
|
+
xpath,
|
|
197
|
+
)
|
|
198
|
+
if data:
|
|
199
|
+
s_tag = data.group(1)
|
|
200
|
+
if s_tag == "*":
|
|
201
|
+
s_tag = ""
|
|
202
|
+
s_atr1 = data.group(2)
|
|
203
|
+
s_val1 = data.group(3)
|
|
204
|
+
s_atr2 = data.group(4)
|
|
205
|
+
s_val2 = data.group(5)
|
|
206
|
+
return '%s[%s="%s"], %s[%s="%s"]' % (
|
|
207
|
+
s_tag, s_atr1, s_val1, s_tag, s_atr2, s_val2
|
|
208
|
+
)
|
|
209
|
+
|
|
191
210
|
# **** End of handling special xpath edge cases instantly ****
|
|
192
211
|
|
|
193
212
|
if xpath[0] != '"' and xpath[-1] != '"' and xpath.count('"') % 2 == 0:
|
|
@@ -356,16 +356,6 @@ def Driver(
|
|
|
356
356
|
sb_config._cdp_browser = "comet"
|
|
357
357
|
sb_config._cdp_bin_loc = bin_loc
|
|
358
358
|
browser_list.append("--browser=comet")
|
|
359
|
-
if "--browser=atlas" in sys_argv or "--browser atlas" in sys_argv:
|
|
360
|
-
if not bin_loc_in_options:
|
|
361
|
-
bin_loc = detect_b_ver.get_binary_location("atlas")
|
|
362
|
-
if os.path.exists(bin_loc):
|
|
363
|
-
browser_changes += 1
|
|
364
|
-
browser_set = "atlas"
|
|
365
|
-
sb_config._browser_shortcut = "atlas"
|
|
366
|
-
sb_config._cdp_browser = "atlas"
|
|
367
|
-
sb_config._cdp_bin_loc = bin_loc
|
|
368
|
-
browser_list.append("--browser=atlas")
|
|
369
359
|
browser_text = browser_set
|
|
370
360
|
if "--chrome" in sys_argv and not browser_set == "chrome":
|
|
371
361
|
browser_changes += 1
|
|
@@ -417,16 +407,6 @@ def Driver(
|
|
|
417
407
|
sb_config._cdp_browser = "comet"
|
|
418
408
|
sb_config._cdp_bin_loc = bin_loc
|
|
419
409
|
browser_list.append("--comet")
|
|
420
|
-
if "--atlas" in sys_argv and not browser_set == "atlas":
|
|
421
|
-
if not bin_loc_in_options:
|
|
422
|
-
bin_loc = detect_b_ver.get_binary_location("atlas")
|
|
423
|
-
if os.path.exists(bin_loc):
|
|
424
|
-
browser_changes += 1
|
|
425
|
-
browser_text = "atlas"
|
|
426
|
-
sb_config._browser_shortcut = "atlas"
|
|
427
|
-
sb_config._cdp_browser = "atlas"
|
|
428
|
-
sb_config._cdp_bin_loc = bin_loc
|
|
429
|
-
browser_list.append("--atlas")
|
|
430
410
|
if browser_changes > 1:
|
|
431
411
|
message = "\n\n TOO MANY browser types were entered!"
|
|
432
412
|
message += "\n There were %s found:\n > %s" % (
|
|
@@ -748,7 +728,7 @@ def Driver(
|
|
|
748
728
|
uc_cdp_events = False
|
|
749
729
|
if (
|
|
750
730
|
undetectable
|
|
751
|
-
and browser not in ["chrome", "opera", "brave", "comet"
|
|
731
|
+
and browser not in ["chrome", "opera", "brave", "comet"]
|
|
752
732
|
):
|
|
753
733
|
message = (
|
|
754
734
|
'\n Undetected-Chromedriver Mode ONLY supports Chromium browsers!'
|
|
@@ -782,9 +762,7 @@ def Driver(
|
|
|
782
762
|
if headless2 and browser == "firefox":
|
|
783
763
|
headless2 = False # Only for Chromium browsers
|
|
784
764
|
headless = True # Firefox has regular headless
|
|
785
|
-
elif browser not in [
|
|
786
|
-
"chrome", "edge", "opera", "brave", "comet", "atlas"
|
|
787
|
-
]:
|
|
765
|
+
elif browser not in ["chrome", "edge", "opera", "brave", "comet"]:
|
|
788
766
|
headless2 = False # Only for Chromium browsers
|
|
789
767
|
if disable_csp is None:
|
|
790
768
|
if (
|
|
@@ -32,7 +32,6 @@ def pytest_addoption(parser):
|
|
|
32
32
|
--opera (Shortcut for "--browser=opera".)
|
|
33
33
|
--brave (Shortcut for "--browser=brave".)
|
|
34
34
|
--comet (Shortcut for "--browser=comet".)
|
|
35
|
-
--atlas (Shortcut for "--browser=atlas".)
|
|
36
35
|
--chromium (Shortcut for using base `Chromium`)
|
|
37
36
|
--cft (Shortcut for using `Chrome for Testing`)
|
|
38
37
|
--chs (Shortcut for using `Chrome-Headless-Shell`)
|
|
@@ -214,13 +213,6 @@ def pytest_addoption(parser):
|
|
|
214
213
|
default=False,
|
|
215
214
|
help="""Shortcut for --browser=comet""",
|
|
216
215
|
)
|
|
217
|
-
parser.addoption(
|
|
218
|
-
"--atlas",
|
|
219
|
-
action="store_true",
|
|
220
|
-
dest="use_atlas",
|
|
221
|
-
default=False,
|
|
222
|
-
help="""Shortcut for --browser=atlas""",
|
|
223
|
-
)
|
|
224
216
|
parser.addoption(
|
|
225
217
|
"--use-chromium",
|
|
226
218
|
"--chromium",
|
|
@@ -1555,16 +1547,6 @@ def pytest_addoption(parser):
|
|
|
1555
1547
|
sb_config._cdp_browser = "comet"
|
|
1556
1548
|
sb_config._cdp_bin_loc = bin_loc
|
|
1557
1549
|
browser_list.append("--browser=comet")
|
|
1558
|
-
if "--browser=atlas" in sys_argv or "--browser atlas" in sys_argv:
|
|
1559
|
-
if not bin_loc_in_options:
|
|
1560
|
-
bin_loc = detect_b_ver.get_binary_location("atlas")
|
|
1561
|
-
if os.path.exists(bin_loc):
|
|
1562
|
-
browser_changes += 1
|
|
1563
|
-
browser_set = "atlas"
|
|
1564
|
-
sb_config._browser_shortcut = "atlas"
|
|
1565
|
-
sb_config._cdp_browser = "atlas"
|
|
1566
|
-
sb_config._cdp_bin_loc = bin_loc
|
|
1567
|
-
browser_list.append("--browser=atlas")
|
|
1568
1550
|
browser_text = browser_set
|
|
1569
1551
|
if "--chrome" in sys_argv and not browser_set == "chrome":
|
|
1570
1552
|
browser_changes += 1
|
|
@@ -1621,16 +1603,6 @@ def pytest_addoption(parser):
|
|
|
1621
1603
|
sb_config._cdp_browser = "comet"
|
|
1622
1604
|
sb_config._cdp_bin_loc = bin_loc
|
|
1623
1605
|
browser_list.append("--comet")
|
|
1624
|
-
if "--atlas" in sys_argv and not browser_set == "atlas":
|
|
1625
|
-
if not bin_loc_in_options:
|
|
1626
|
-
bin_loc = detect_b_ver.get_binary_location("atlas")
|
|
1627
|
-
if os.path.exists(bin_loc):
|
|
1628
|
-
browser_changes += 1
|
|
1629
|
-
browser_text = "atlas"
|
|
1630
|
-
sb_config._browser_shortcut = "atlas"
|
|
1631
|
-
sb_config._cdp_browser = "atlas"
|
|
1632
|
-
sb_config._cdp_bin_loc = bin_loc
|
|
1633
|
-
browser_list.append("--atlas")
|
|
1634
1606
|
if browser_changes > 1:
|
|
1635
1607
|
message = "\n TOO MANY browser types were entered!"
|
|
1636
1608
|
message += "\n There were %s found:\n > %s" % (
|
|
@@ -1644,7 +1616,7 @@ def pytest_addoption(parser):
|
|
|
1644
1616
|
using_recorder
|
|
1645
1617
|
and browser_changes == 1
|
|
1646
1618
|
and browser_text not in [
|
|
1647
|
-
"chrome", "edge", "opera", "brave", "comet", "
|
|
1619
|
+
"chrome", "edge", "opera", "brave", "comet", "chromium"
|
|
1648
1620
|
]
|
|
1649
1621
|
):
|
|
1650
1622
|
message = (
|
|
@@ -1668,7 +1640,7 @@ def pytest_addoption(parser):
|
|
|
1668
1640
|
if (
|
|
1669
1641
|
browser_changes == 1
|
|
1670
1642
|
and browser_text not in [
|
|
1671
|
-
"chrome", "opera", "brave", "comet", "
|
|
1643
|
+
"chrome", "opera", "brave", "comet", "chromium"
|
|
1672
1644
|
]
|
|
1673
1645
|
and undetectable
|
|
1674
1646
|
):
|
|
@@ -1710,10 +1682,6 @@ def pytest_configure(config):
|
|
|
1710
1682
|
bin_loc = detect_b_ver.get_binary_location("comet")
|
|
1711
1683
|
if bin_loc and os.path.exists(bin_loc):
|
|
1712
1684
|
sb_config.browser = "comet"
|
|
1713
|
-
elif config.getoption("use_atlas"):
|
|
1714
|
-
bin_loc = detect_b_ver.get_binary_location("atlas")
|
|
1715
|
-
if bin_loc and os.path.exists(bin_loc):
|
|
1716
|
-
sb_config.browser = "atlas"
|
|
1717
1685
|
sb_config.account = config.getoption("account")
|
|
1718
1686
|
sb_config.data = config.getoption("data")
|
|
1719
1687
|
sb_config.var1 = config.getoption("var1")
|
|
@@ -1735,7 +1703,7 @@ def pytest_configure(config):
|
|
|
1735
1703
|
sb_config.headless = True # Firefox has regular headless
|
|
1736
1704
|
elif (
|
|
1737
1705
|
sb_config.browser not in [
|
|
1738
|
-
"chrome", "edge", "opera", "brave", "comet", "
|
|
1706
|
+
"chrome", "edge", "opera", "brave", "comet", "chromium"
|
|
1739
1707
|
]
|
|
1740
1708
|
):
|
|
1741
1709
|
sb_config.headless2 = False # Only for Chromium browsers
|
|
@@ -1776,13 +1744,6 @@ def pytest_configure(config):
|
|
|
1776
1744
|
bin_loc = detect_b_ver.get_binary_location("comet")
|
|
1777
1745
|
if bin_loc and os.path.exists(bin_loc):
|
|
1778
1746
|
sb_config.binary_location = bin_loc
|
|
1779
|
-
elif (
|
|
1780
|
-
config.getoption("use_atlas")
|
|
1781
|
-
or sb_config._browser_shortcut == "atlas"
|
|
1782
|
-
):
|
|
1783
|
-
bin_loc = detect_b_ver.get_binary_location("atlas")
|
|
1784
|
-
if bin_loc and os.path.exists(bin_loc):
|
|
1785
|
-
sb_config.binary_location = bin_loc
|
|
1786
1747
|
if config.getoption("use_chromium") and not sb_config.binary_location:
|
|
1787
1748
|
sb_config.binary_location = "_chromium_"
|
|
1788
1749
|
elif config.getoption("use_cft") and not sb_config.binary_location:
|