seleniumbase 4.36.0__tar.gz → 4.36.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.36.0/seleniumbase.egg-info → seleniumbase-4.36.2}/PKG-INFO +4 -4
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/requirements.txt +2 -2
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/__version__.py +1 -1
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/browser_launcher.py +11 -1
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/sb_cdp.py +6 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/base_case.py +20 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/__init__.py +6 -2
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/tab.py +36 -4
- {seleniumbase-4.36.0 → seleniumbase-4.36.2/seleniumbase.egg-info}/PKG-INFO +4 -4
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase.egg-info/requires.txt +3 -3
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/setup.py +3 -3
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/.gitignore +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/LICENSE +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/MANIFEST.in +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/README.md +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/install.sh +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/pyproject.toml +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/pytest.ini +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/sbase/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/sbase/__main__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/sbase/steps.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/__main__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/behave/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/behave/behave_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/behave/behave_sb.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/behave/steps.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/common/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/common/decorators.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/common/encryption.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/common/exceptions.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/common/obfuscate.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/common/unobfuscate.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/config/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/config/ad_block_list.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/config/proxy_list.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/config/settings.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/logo_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/rich_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/run.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_behave_gui.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_caseplans.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_commander.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_install.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_mkchart.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_mkdir.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_mkfile.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_mkpres.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_mkrec.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_objectify.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_print.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/console_scripts/sb_recorder.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/application_manager.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/capabilities_parser.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/colored_traceback.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/create_db_tables.sql +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/detect_b_ver.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/download_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/encoded_images.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/jqc_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/log_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/mysql.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/proxy_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/recorder_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/report_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/s3_manager.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/sb_driver.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/session_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/settings_parser.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/style_sheet.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/testcase_manager.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/tour_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/core/visual_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/drivers/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/extensions/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/extensions/ad_block.zip +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/extensions/disable_csp.zip +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/extensions/recorder.zip +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/extensions/sbase_ext.zip +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/constants.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/css_to_xpath.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/errors.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/js_utils.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/page_actions.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/page_utils.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/shared_utils.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/unittest_helper.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/words.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/fixtures/xpath_to_css.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/js_code/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/js_code/active_css_js.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/js_code/live_js.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/js_code/recorder_js.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/masterqa/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/masterqa/master_qa.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/base_plugin.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/basic_test_info.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/db_reporting_plugin.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/driver_manager.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/page_source.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/pytest_plugin.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/s3_logging_plugin.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/sb_manager.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/screen_shots.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/plugins/selenium_plugin.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/resources/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/chinese.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/dutch.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/french.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/italian.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/japanese.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/korean.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/master_dict.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/portuguese.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/russian.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/spanish.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/translate/translator.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/_contradict.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/browser.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/cdp_util.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/config.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/connection.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/element.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/dprocess.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/options.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/patcher.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/reactor.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/webelement.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/download_selenium_server.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/font_color +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/grid-hub +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/grid-node +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/grid_hub.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/grid_node.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/register-grid-node.bat +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/register-grid-node.sh +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_ide/__init__.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_ide/convert_ide.py +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase.egg-info/SOURCES.txt +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase.egg-info/dependency_links.txt +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase.egg-info/entry_points.txt +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase.egg-info/top_level.txt +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/setup.cfg +0 -0
- {seleniumbase-4.36.0 → seleniumbase-4.36.2}/virtualenv_install.sh +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.36.
|
3
|
+
Version: 4.36.2
|
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
|
@@ -62,7 +62,7 @@ License-File: LICENSE
|
|
62
62
|
Requires-Dist: pip>=25.0.1
|
63
63
|
Requires-Dist: packaging>=24.2
|
64
64
|
Requires-Dist: setuptools~=70.2; python_version < "3.10"
|
65
|
-
Requires-Dist: setuptools>=
|
65
|
+
Requires-Dist: setuptools>=78.0.2; python_version >= "3.10"
|
66
66
|
Requires-Dist: wheel>=0.45.1
|
67
67
|
Requires-Dist: attrs>=25.3.0
|
68
68
|
Requires-Dist: certifi>=2025.1.31
|
@@ -89,7 +89,7 @@ Requires-Dist: pyyaml>=6.0.2
|
|
89
89
|
Requires-Dist: pygments>=2.19.1
|
90
90
|
Requires-Dist: pyreadline3>=3.5.3; platform_system == "Windows"
|
91
91
|
Requires-Dist: tabcompleter>=1.4.0
|
92
|
-
Requires-Dist: pdbp>=1.
|
92
|
+
Requires-Dist: pdbp>=1.7.0
|
93
93
|
Requires-Dist: idna==3.10
|
94
94
|
Requires-Dist: chardet==5.2.0
|
95
95
|
Requires-Dist: charset-normalizer==3.4.1
|
@@ -151,7 +151,7 @@ Requires-Dist: ipython==7.34.0; extra == "ipdb"
|
|
151
151
|
Provides-Extra: mss
|
152
152
|
Requires-Dist: mss==9.0.2; extra == "mss"
|
153
153
|
Provides-Extra: pdfminer
|
154
|
-
Requires-Dist: pdfminer.six==
|
154
|
+
Requires-Dist: pdfminer.six==20250324; extra == "pdfminer"
|
155
155
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
156
156
|
Requires-Dist: cryptography==44.0.2; python_version >= "3.9" and extra == "pdfminer"
|
157
157
|
Requires-Dist: cffi==1.17.1; extra == "pdfminer"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
pip>=25.0.1
|
2
2
|
packaging>=24.2
|
3
3
|
setuptools~=70.2;python_version<"3.10"
|
4
|
-
setuptools>=
|
4
|
+
setuptools>=78.0.2;python_version>="3.10"
|
5
5
|
wheel>=0.45.1
|
6
6
|
attrs>=25.3.0
|
7
7
|
certifi>=2025.1.31
|
@@ -28,7 +28,7 @@ pyyaml>=6.0.2
|
|
28
28
|
pygments>=2.19.1
|
29
29
|
pyreadline3>=3.5.3;platform_system=="Windows"
|
30
30
|
tabcompleter>=1.4.0
|
31
|
-
pdbp>=1.
|
31
|
+
pdbp>=1.7.0
|
32
32
|
idna==3.10
|
33
33
|
chardet==5.2.0
|
34
34
|
charset-normalizer==3.4.1
|
@@ -1,2 +1,2 @@
|
|
1
1
|
# seleniumbase package
|
2
|
-
__version__ = "4.36.
|
2
|
+
__version__ = "4.36.2"
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import fasteners
|
2
|
+
import json
|
2
3
|
import logging
|
3
4
|
import os
|
4
5
|
import platform
|
@@ -769,6 +770,7 @@ def uc_open_with_cdp_mode(driver, url=None):
|
|
769
770
|
cdp.scroll_up = CDPM.scroll_up
|
770
771
|
cdp.scroll_down = CDPM.scroll_down
|
771
772
|
cdp.save_screenshot = CDPM.save_screenshot
|
773
|
+
cdp.print_to_pdf = CDPM.print_to_pdf
|
772
774
|
cdp.page = page # async world
|
773
775
|
cdp.driver = driver.cdp_base # async world
|
774
776
|
cdp.tab = cdp.page # shortcut (original)
|
@@ -2125,6 +2127,15 @@ def _set_chrome_options(
|
|
2125
2127
|
prefs["enable_do_not_track"] = True
|
2126
2128
|
if external_pdf:
|
2127
2129
|
prefs["plugins.always_open_pdf_externally"] = True
|
2130
|
+
pdf_settings = {
|
2131
|
+
"recentDestinations": [
|
2132
|
+
{"id": "Save as PDF", "origin": "local", "account": ""}
|
2133
|
+
],
|
2134
|
+
"selectedDestinationId": "Save as PDF",
|
2135
|
+
"version": 2,
|
2136
|
+
}
|
2137
|
+
app_state = "printing.print_preview_sticky_settings.appState"
|
2138
|
+
prefs[app_state] = json.dumps(pdf_settings)
|
2128
2139
|
if proxy_string or proxy_pac_url:
|
2129
2140
|
# Implementation of https://stackoverflow.com/q/65705775/7058266
|
2130
2141
|
prefs["webrtc.ip_handling_policy"] = "disable_non_proxied_udp"
|
@@ -3299,7 +3310,6 @@ def get_remote_driver(
|
|
3299
3310
|
from seleniumbase.core import capabilities_parser
|
3300
3311
|
desired_caps = capabilities_parser.get_desired_capabilities(cap_file)
|
3301
3312
|
if cap_string:
|
3302
|
-
import json
|
3303
3313
|
try:
|
3304
3314
|
extra_caps = json.loads(str(cap_string))
|
3305
3315
|
except Exception as e:
|
@@ -2181,6 +2181,12 @@ class CDPMethods():
|
|
2181
2181
|
else:
|
2182
2182
|
self.select(selector).save_screenshot(filename)
|
2183
2183
|
|
2184
|
+
def print_to_pdf(self, name, folder=None):
|
2185
|
+
filename = name
|
2186
|
+
if folder:
|
2187
|
+
filename = os.path.join(folder, name)
|
2188
|
+
self.loop.run_until_complete(self.page.print_to_pdf(filename))
|
2189
|
+
|
2184
2190
|
|
2185
2191
|
class Chrome(CDPMethods):
|
2186
2192
|
def __init__(self, url=None, **kwargs):
|
@@ -3993,6 +3993,7 @@ class BaseCase(unittest.TestCase):
|
|
3993
3993
|
d_width=None,
|
3994
3994
|
d_height=None,
|
3995
3995
|
d_p_r=None,
|
3996
|
+
**kwargs,
|
3996
3997
|
):
|
3997
3998
|
"""This method spins up an extra browser for tests that require
|
3998
3999
|
more than one. The first browser is already provided by tests
|
@@ -4081,6 +4082,11 @@ class BaseCase(unittest.TestCase):
|
|
4081
4082
|
" for examples!)"
|
4082
4083
|
% (browserstack_ref, sauce_labs_ref)
|
4083
4084
|
)
|
4085
|
+
shortcuts = ["dark", "guest", "locale", "mobile", "pls", "uc", "wire"]
|
4086
|
+
if kwargs:
|
4087
|
+
for key in kwargs.keys():
|
4088
|
+
if key not in shortcuts:
|
4089
|
+
raise TypeError("Unexpected keyword argument '%s'" % key)
|
4084
4090
|
if browser is None:
|
4085
4091
|
browser = self.browser
|
4086
4092
|
browser_name = browser
|
@@ -4088,6 +4094,8 @@ class BaseCase(unittest.TestCase):
|
|
4088
4094
|
headless = self.headless
|
4089
4095
|
if locale_code is None:
|
4090
4096
|
locale_code = self.locale_code
|
4097
|
+
if "locale" in kwargs and not locale_code:
|
4098
|
+
locale_code = kwargs["locale"]
|
4091
4099
|
if protocol is None:
|
4092
4100
|
protocol = self.protocol
|
4093
4101
|
if servername is None:
|
@@ -4130,6 +4138,8 @@ class BaseCase(unittest.TestCase):
|
|
4130
4138
|
uc_cdp_events = self.uc_cdp_events
|
4131
4139
|
if uc_subprocess is None:
|
4132
4140
|
uc_subprocess = self.uc_subprocess
|
4141
|
+
if "uc" in kwargs and not undetectable:
|
4142
|
+
undetectable = kwargs["uc"]
|
4133
4143
|
if log_cdp_events is None:
|
4134
4144
|
log_cdp_events = self.log_cdp_events
|
4135
4145
|
if no_sandbox is None:
|
@@ -4144,8 +4154,12 @@ class BaseCase(unittest.TestCase):
|
|
4144
4154
|
incognito = self.incognito
|
4145
4155
|
if guest_mode is None:
|
4146
4156
|
guest_mode = self.guest_mode
|
4157
|
+
if "guest" in kwargs and not guest_mode:
|
4158
|
+
guest_mode = kwargs["guest"]
|
4147
4159
|
if dark_mode is None:
|
4148
4160
|
dark_mode = self.dark_mode
|
4161
|
+
if "dark" in kwargs and not dark_mode:
|
4162
|
+
dark_mode = kwargs["dark"]
|
4149
4163
|
if devtools is None:
|
4150
4164
|
devtools = self.devtools
|
4151
4165
|
if remote_debug is None:
|
@@ -4182,8 +4196,12 @@ class BaseCase(unittest.TestCase):
|
|
4182
4196
|
driver_version = self.driver_version
|
4183
4197
|
if page_load_strategy is None:
|
4184
4198
|
page_load_strategy = self.page_load_strategy
|
4199
|
+
if "pls" in kwargs and not page_load_strategy:
|
4200
|
+
page_load_strategy = kwargs["pls"]
|
4185
4201
|
if use_wire is None:
|
4186
4202
|
use_wire = self.use_wire
|
4203
|
+
if "wire" in kwargs and not use_wire:
|
4204
|
+
use_wire = kwargs["wire"]
|
4187
4205
|
if external_pdf is None:
|
4188
4206
|
external_pdf = self.external_pdf
|
4189
4207
|
test_id = self.__get_test_id()
|
@@ -4193,6 +4211,8 @@ class BaseCase(unittest.TestCase):
|
|
4193
4211
|
cap_string = self.cap_string
|
4194
4212
|
if is_mobile is None:
|
4195
4213
|
is_mobile = self.mobile_emulator
|
4214
|
+
if "mobile" in kwargs and not is_mobile:
|
4215
|
+
is_mobile = kwargs["mobile"]
|
4196
4216
|
if d_width is None:
|
4197
4217
|
d_width = self.__device_width
|
4198
4218
|
if d_height is None:
|
@@ -459,7 +459,9 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
|
459
459
|
if self.current_url.startswith(
|
460
460
|
"chrome-extension://"
|
461
461
|
):
|
462
|
-
|
462
|
+
# https://issues.chromium.org/issues/396611138
|
463
|
+
# (Uncomment below when resolved)
|
464
|
+
# self.close()
|
463
465
|
if self.service.is_connectable():
|
464
466
|
self.stop_client()
|
465
467
|
self.service.stop()
|
@@ -496,7 +498,9 @@ class Chrome(selenium.webdriver.chrome.webdriver.WebDriver):
|
|
496
498
|
if self.current_url.startswith(
|
497
499
|
"chrome-extension://"
|
498
500
|
):
|
499
|
-
|
501
|
+
# https://issues.chromium.org/issues/396611138
|
502
|
+
# (Uncomment below when resolved)
|
503
|
+
# self.close()
|
500
504
|
if self.service.is_connectable():
|
501
505
|
self.stop_client()
|
502
506
|
self.service.stop()
|
@@ -1,7 +1,10 @@
|
|
1
1
|
from __future__ import annotations
|
2
2
|
import asyncio
|
3
|
+
import base64
|
4
|
+
import datetime
|
3
5
|
import logging
|
4
6
|
import pathlib
|
7
|
+
import urllib.parse
|
5
8
|
import warnings
|
6
9
|
from typing import Dict, List, Union, Optional, Tuple
|
7
10
|
from . import browser as cdp_browser
|
@@ -1133,9 +1136,6 @@ class Tab(Connection):
|
|
1133
1136
|
:return: The path/filename of the saved screenshot.
|
1134
1137
|
:rtype: str
|
1135
1138
|
"""
|
1136
|
-
import urllib.parse
|
1137
|
-
import datetime
|
1138
|
-
|
1139
1139
|
await self.sleep() # Update the target's URL
|
1140
1140
|
path = None
|
1141
1141
|
if format.lower() in ["jpg", "jpeg"]:
|
@@ -1166,8 +1166,40 @@ class Tab(Connection):
|
|
1166
1166
|
"Most possible cause is the page "
|
1167
1167
|
"has not finished loading yet."
|
1168
1168
|
)
|
1169
|
-
|
1169
|
+
data_bytes = base64.b64decode(data)
|
1170
|
+
if not path:
|
1171
|
+
raise RuntimeError("Invalid filename or path: '%s'" % filename)
|
1172
|
+
path.write_bytes(data_bytes)
|
1173
|
+
return str(path)
|
1170
1174
|
|
1175
|
+
async def print_to_pdf(
|
1176
|
+
self,
|
1177
|
+
filename: Optional[PathLike] = "auto",
|
1178
|
+
) -> str:
|
1179
|
+
"""
|
1180
|
+
Saves a webpage as a PDF.
|
1181
|
+
:param filename: uses this as the save path
|
1182
|
+
:type filename: PathLike
|
1183
|
+
:return: The path/filename of the saved screenshot.
|
1184
|
+
:rtype: str
|
1185
|
+
"""
|
1186
|
+
await self.sleep() # Update the target's URL
|
1187
|
+
path = None
|
1188
|
+
ext = ".pdf"
|
1189
|
+
if not filename or filename == "auto":
|
1190
|
+
parsed = urllib.parse.urlparse(self.target.url)
|
1191
|
+
parts = parsed.path.split("/")
|
1192
|
+
last_part = parts[-1]
|
1193
|
+
last_part = last_part.rsplit("?", 1)[0]
|
1194
|
+
dt_str = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
|
1195
|
+
candidate = f"{parsed.hostname}__{last_part}_{dt_str}"
|
1196
|
+
path = pathlib.Path(candidate + ext) # noqa
|
1197
|
+
else:
|
1198
|
+
path = pathlib.Path(filename)
|
1199
|
+
path.parent.mkdir(parents=True, exist_ok=True)
|
1200
|
+
data, _ = await self.send(cdp.page.print_to_pdf())
|
1201
|
+
if not data:
|
1202
|
+
raise ProtocolException("Could not save PDF.")
|
1171
1203
|
data_bytes = base64.b64decode(data)
|
1172
1204
|
if not path:
|
1173
1205
|
raise RuntimeError("Invalid filename or path: '%s'" % filename)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: seleniumbase
|
3
|
-
Version: 4.36.
|
3
|
+
Version: 4.36.2
|
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
|
@@ -62,7 +62,7 @@ License-File: LICENSE
|
|
62
62
|
Requires-Dist: pip>=25.0.1
|
63
63
|
Requires-Dist: packaging>=24.2
|
64
64
|
Requires-Dist: setuptools~=70.2; python_version < "3.10"
|
65
|
-
Requires-Dist: setuptools>=
|
65
|
+
Requires-Dist: setuptools>=78.0.2; python_version >= "3.10"
|
66
66
|
Requires-Dist: wheel>=0.45.1
|
67
67
|
Requires-Dist: attrs>=25.3.0
|
68
68
|
Requires-Dist: certifi>=2025.1.31
|
@@ -89,7 +89,7 @@ Requires-Dist: pyyaml>=6.0.2
|
|
89
89
|
Requires-Dist: pygments>=2.19.1
|
90
90
|
Requires-Dist: pyreadline3>=3.5.3; platform_system == "Windows"
|
91
91
|
Requires-Dist: tabcompleter>=1.4.0
|
92
|
-
Requires-Dist: pdbp>=1.
|
92
|
+
Requires-Dist: pdbp>=1.7.0
|
93
93
|
Requires-Dist: idna==3.10
|
94
94
|
Requires-Dist: chardet==5.2.0
|
95
95
|
Requires-Dist: charset-normalizer==3.4.1
|
@@ -151,7 +151,7 @@ Requires-Dist: ipython==7.34.0; extra == "ipdb"
|
|
151
151
|
Provides-Extra: mss
|
152
152
|
Requires-Dist: mss==9.0.2; extra == "mss"
|
153
153
|
Provides-Extra: pdfminer
|
154
|
-
Requires-Dist: pdfminer.six==
|
154
|
+
Requires-Dist: pdfminer.six==20250324; extra == "pdfminer"
|
155
155
|
Requires-Dist: cryptography==39.0.2; python_version < "3.9" and extra == "pdfminer"
|
156
156
|
Requires-Dist: cryptography==44.0.2; python_version >= "3.9" and extra == "pdfminer"
|
157
157
|
Requires-Dist: cffi==1.17.1; extra == "pdfminer"
|
@@ -17,7 +17,7 @@ colorama>=0.4.6
|
|
17
17
|
pyyaml>=6.0.2
|
18
18
|
pygments>=2.19.1
|
19
19
|
tabcompleter>=1.4.0
|
20
|
-
pdbp>=1.
|
20
|
+
pdbp>=1.7.0
|
21
21
|
idna==3.10
|
22
22
|
chardet==5.2.0
|
23
23
|
charset-normalizer==3.4.1
|
@@ -67,7 +67,7 @@ cssselect==1.2.0
|
|
67
67
|
pytest-rerunfailures==14.0
|
68
68
|
|
69
69
|
[:python_version >= "3.10"]
|
70
|
-
setuptools>=
|
70
|
+
setuptools>=78.0.2
|
71
71
|
urllib3<2.4.0,>=1.26.20
|
72
72
|
|
73
73
|
[:python_version >= "3.9"]
|
@@ -116,7 +116,7 @@ ipython==7.34.0
|
|
116
116
|
mss==9.0.2
|
117
117
|
|
118
118
|
[pdfminer]
|
119
|
-
pdfminer.six==
|
119
|
+
pdfminer.six==20250324
|
120
120
|
cffi==1.17.1
|
121
121
|
pycparser==2.22
|
122
122
|
|
@@ -150,7 +150,7 @@ setup(
|
|
150
150
|
'pip>=25.0.1',
|
151
151
|
'packaging>=24.2',
|
152
152
|
'setuptools~=70.2;python_version<"3.10"', # Newer ones had issues
|
153
|
-
'setuptools>=
|
153
|
+
'setuptools>=78.0.2;python_version>="3.10"',
|
154
154
|
'wheel>=0.45.1',
|
155
155
|
'attrs>=25.3.0',
|
156
156
|
"certifi>=2025.1.31",
|
@@ -177,7 +177,7 @@ setup(
|
|
177
177
|
'pygments>=2.19.1',
|
178
178
|
'pyreadline3>=3.5.3;platform_system=="Windows"',
|
179
179
|
"tabcompleter>=1.4.0",
|
180
|
-
"pdbp>=1.
|
180
|
+
"pdbp>=1.7.0",
|
181
181
|
"idna==3.10",
|
182
182
|
'chardet==5.2.0',
|
183
183
|
'charset-normalizer==3.4.1',
|
@@ -259,7 +259,7 @@ setup(
|
|
259
259
|
# pip install -e .[pdfminer]
|
260
260
|
# (An optional library for parsing PDF files.)
|
261
261
|
"pdfminer": [
|
262
|
-
'pdfminer.six==
|
262
|
+
'pdfminer.six==20250324',
|
263
263
|
'cryptography==39.0.2;python_version<"3.9"',
|
264
264
|
'cryptography==44.0.2;python_version>="3.9"',
|
265
265
|
'cffi==1.17.1',
|
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.36.0 → seleniumbase-4.36.2}/seleniumbase/undetected/cdp_driver/_contradict.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.36.0 → seleniumbase-4.36.2}/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.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/__init__.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/grid_hub.py
RENAMED
File without changes
|
{seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/grid_node.py
RENAMED
File without changes
|
File without changes
|
File without changes
|
{seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.bat
RENAMED
File without changes
|
{seleniumbase-4.36.0 → seleniumbase-4.36.2}/seleniumbase/utilities/selenium_grid/start-grid-hub.sh
RENAMED
File without changes
|
File without changes
|
{seleniumbase-4.36.0 → seleniumbase-4.36.2}/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
|