stealth-browserctl 0.0.1__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.
- stealth_browserctl-0.0.1/.codeartsdoer/.gitignore +1 -0
- stealth_browserctl-0.0.1/.gitignore +225 -0
- stealth_browserctl-0.0.1/PKG-INFO +427 -0
- stealth_browserctl-0.0.1/README.md +410 -0
- stealth_browserctl-0.0.1/docs/INSTALL_FROM_TESTPYPI.md +28 -0
- stealth_browserctl-0.0.1/docs/chromedriver_anti_detection.md +267 -0
- stealth_browserctl-0.0.1/docs/mitmproxy_addon_events.md +368 -0
- stealth_browserctl-0.0.1/pyproject.toml +34 -0
- stealth_browserctl-0.0.1/src/backend/__init__.py +18 -0
- stealth_browserctl-0.0.1/src/backend/constants.py +20 -0
- stealth_browserctl-0.0.1/src/backend/daemon_client.py +109 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/README.md +143 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/__init__.py +6 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/__init__.py +17 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/__init__.py +11 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/__init__.py +22 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/base.py +123 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/generator_dom.py +89 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/types.py +57 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/types_generated.py +60 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/manager.py +231 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/browser.py +505 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/browser/session_config.py +381 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/__init__.py +23 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/base_handler.py +122 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/core_commands.py +243 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/devtools_commands.py +257 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/dialog_commands.py +35 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/input_commands.py +153 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/interaction_commands.py +289 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/navigation_commands.py +144 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/proxy_commands.py +119 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/session_commands.py +72 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/storage_commands.py +278 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/commands/web_commands.py +362 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/errors.py +193 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/models.py +67 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/README.md +73 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/__init__.py +0 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/compiled/ariaSnapshot.js +1154 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/package.json +16 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/script_loader.py +115 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/tsconfig.json +17 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/typescript/ariaSnapshot.ts +1380 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server/server.py +184 -0
- stealth_browserctl-0.0.1/src/backend/daemon_server.py +143 -0
- stealth_browserctl-0.0.1/src/backend/flow/__init__.py +31 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/__init__.py +25 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/ca.crt +30 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/ca.key +52 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/config.py +320 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/cust_addons.py +418 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/custom_upstream_auth.py +57 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/inspect.py +290 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/modifier.py +348 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/request.py +414 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/server.py +478 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/tab_storage.py +781 -0
- stealth_browserctl-0.0.1/src/backend/flow/mitm/utils.py +138 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/__init__.py +26 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/config.py +1156 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/daemon_process.py +309 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/manager.py +609 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/pool.py +161 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/process.py +327 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/proxy_airport_cli.py +152 -0
- stealth_browserctl-0.0.1/src/backend/flow/v2ray/subscribers.py +120 -0
- stealth_browserctl-0.0.1/src/backend/human/__init__.py +336 -0
- stealth_browserctl-0.0.1/src/backend/human/config.py +114 -0
- stealth_browserctl-0.0.1/src/backend/human/keyboard.py +145 -0
- stealth_browserctl-0.0.1/src/backend/human/mouse.py +172 -0
- stealth_browserctl-0.0.1/src/backend/human/scroll.py +240 -0
- stealth_browserctl-0.0.1/src/backend/undetected/__init__.py +1042 -0
- stealth_browserctl-0.0.1/src/backend/undetected/readme.me +11 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/__init__.py +53 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/compiled/stealth.js +1022 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/0_utils.ts +277 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.app.ts +75 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.csi.ts +32 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.loadTimes.ts +109 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.runtime.ts +234 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/hairline.fix.ts +13 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/iframe.contentWindow.ts +77 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/media.codecs.ts +50 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.languages.ts +7 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.permissions.ts +23 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.plugins.ts +216 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.vendor.ts +7 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.webdriver.ts +5 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.webrtc.ts +11 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/readme.md +3 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/stealth.entry.ts +46 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/tsconfig.json +17 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/webgl.vendor.ts +24 -0
- stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/window.outerdimensions.ts +12 -0
- stealth_browserctl-0.0.1/src/backend/undetected/undetected_chrome/__init__.py +60 -0
- stealth_browserctl-0.0.1/src/backend/undetected/undetected_chrome/patcher.py +425 -0
- stealth_browserctl-0.0.1/src/backend/undetected/undetected_firefox/__init__.py +52 -0
- stealth_browserctl-0.0.1/src/backend/undetected/undetected_firefox/constants.py +49 -0
- stealth_browserctl-0.0.1/src/backend/undetected/undetected_firefox/patcher.py +286 -0
- stealth_browserctl-0.0.1/src/cli/__init__.py +8 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/.gitignore +4 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/README.md +185 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/assets/skill/SKILL.md +821 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/assets/skill/references/session-management.md +116 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/cordis.patch.yml +4 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/package.json +79 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/scripts/build-client.mjs +87 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/client.tsx +334 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/config.ts +133 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/exposure.ts +263 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/index.ts +232 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/proxycheck-tools.ts +215 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/skill.ts +43 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/tools.ts +234 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/upstream.ts +264 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/src/web-search-tools.ts +312 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/tsconfig.client.json +31 -0
- stealth_browserctl-0.0.1/src/dsh-plugin/tsconfig.json +32 -0
- stealth_browserctl-0.0.1/src/frontend/__init__.py +6 -0
- stealth_browserctl-0.0.1/src/frontend/commands/__init__.py +1 -0
- stealth_browserctl-0.0.1/src/frontend/commands/core.py +238 -0
- stealth_browserctl-0.0.1/src/frontend/commands/devtools.py +412 -0
- stealth_browserctl-0.0.1/src/frontend/commands/input.py +121 -0
- stealth_browserctl-0.0.1/src/frontend/commands/interaction.py +218 -0
- stealth_browserctl-0.0.1/src/frontend/commands/navigation.py +128 -0
- stealth_browserctl-0.0.1/src/frontend/commands/proxy.py +227 -0
- stealth_browserctl-0.0.1/src/frontend/commands/session.py +119 -0
- stealth_browserctl-0.0.1/src/frontend/commands/storage.py +243 -0
- stealth_browserctl-0.0.1/src/frontend/commands/web.py +105 -0
- stealth_browserctl-0.0.1/src/frontend/main.py +179 -0
- stealth_browserctl-0.0.1/src/frontend/skill/browserctl/SKILL.md +786 -0
- stealth_browserctl-0.0.1/src/frontend/skill/browserctl/references/session-management.md +200 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/README.md +666 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/__init__.py +597 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/actions.py +1799 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/driver.py +244 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/errors.py +26 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/local_value.py +172 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/locator.py +1549 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/messenger.py +194 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/models.py +1119 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/session.py +433 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/test_bidi.ipynb +268 -0
- stealth_browserctl-0.0.1/src/webdriver_bidi/wait.py +428 -0
- stealth_browserctl-0.0.1/test_ucbrowser.ipynb +361 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
*
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
#src/backend/daemon_server/scripts/compiled/*
|
|
2
|
+
*.d.ts
|
|
3
|
+
node_modules/
|
|
4
|
+
*.map
|
|
5
|
+
# Byte-compiled / optimized / DLL files
|
|
6
|
+
__pycache__/
|
|
7
|
+
*.py[codz]
|
|
8
|
+
*$py.class
|
|
9
|
+
|
|
10
|
+
# C extensions
|
|
11
|
+
*.so
|
|
12
|
+
|
|
13
|
+
# Distribution / packaging
|
|
14
|
+
.Python
|
|
15
|
+
build/
|
|
16
|
+
develop-eggs/
|
|
17
|
+
dist/
|
|
18
|
+
downloads/
|
|
19
|
+
eggs/
|
|
20
|
+
.eggs/
|
|
21
|
+
lib/
|
|
22
|
+
lib64/
|
|
23
|
+
parts/
|
|
24
|
+
sdist/
|
|
25
|
+
var/
|
|
26
|
+
wheels/
|
|
27
|
+
share/python-wheels/
|
|
28
|
+
*.egg-info/
|
|
29
|
+
.installed.cfg
|
|
30
|
+
*.egg
|
|
31
|
+
MANIFEST
|
|
32
|
+
|
|
33
|
+
# PyInstaller
|
|
34
|
+
# Usually these files are written by a python script from a template
|
|
35
|
+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
|
36
|
+
*.manifest
|
|
37
|
+
*.spec
|
|
38
|
+
|
|
39
|
+
# Installer logs
|
|
40
|
+
pip-log.txt
|
|
41
|
+
pip-delete-this-directory.txt
|
|
42
|
+
|
|
43
|
+
# Unit test / coverage reports
|
|
44
|
+
htmlcov/
|
|
45
|
+
.tox/
|
|
46
|
+
.nox/
|
|
47
|
+
.coverage
|
|
48
|
+
.coverage.*
|
|
49
|
+
.cache
|
|
50
|
+
nosetests.xml
|
|
51
|
+
coverage.xml
|
|
52
|
+
*.cover
|
|
53
|
+
*.py.cover
|
|
54
|
+
*.lcov
|
|
55
|
+
.hypothesis/
|
|
56
|
+
.pytest_cache/
|
|
57
|
+
cover/
|
|
58
|
+
|
|
59
|
+
# Translations
|
|
60
|
+
*.mo
|
|
61
|
+
*.pot
|
|
62
|
+
|
|
63
|
+
# Django stuff:
|
|
64
|
+
*.log
|
|
65
|
+
local_settings.py
|
|
66
|
+
db.sqlite3
|
|
67
|
+
db.sqlite3-journal
|
|
68
|
+
|
|
69
|
+
# Flask stuff:
|
|
70
|
+
instance/
|
|
71
|
+
.webassets-cache
|
|
72
|
+
|
|
73
|
+
# Scrapy stuff:
|
|
74
|
+
.scrapy
|
|
75
|
+
|
|
76
|
+
# Sphinx documentation
|
|
77
|
+
docs/_build/
|
|
78
|
+
|
|
79
|
+
# PyBuilder
|
|
80
|
+
.pybuilder/
|
|
81
|
+
target/
|
|
82
|
+
|
|
83
|
+
# Jupyter Notebook
|
|
84
|
+
.ipynb_checkpoints
|
|
85
|
+
|
|
86
|
+
# IPython
|
|
87
|
+
profile_default/
|
|
88
|
+
ipython_config.py
|
|
89
|
+
|
|
90
|
+
# pyenv
|
|
91
|
+
# For a library or package, you might want to ignore these files since the code is
|
|
92
|
+
# intended to run in multiple environments; otherwise, check them in:
|
|
93
|
+
# .python-version
|
|
94
|
+
|
|
95
|
+
# pipenv
|
|
96
|
+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
|
97
|
+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
|
98
|
+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
|
99
|
+
# install all needed dependencies.
|
|
100
|
+
# Pipfile.lock
|
|
101
|
+
|
|
102
|
+
# UV
|
|
103
|
+
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
|
|
104
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
105
|
+
# commonly ignored for libraries.
|
|
106
|
+
uv.lock
|
|
107
|
+
|
|
108
|
+
# poetry
|
|
109
|
+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
|
110
|
+
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
|
111
|
+
# commonly ignored for libraries.
|
|
112
|
+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
|
113
|
+
# poetry.lock
|
|
114
|
+
# poetry.toml
|
|
115
|
+
|
|
116
|
+
# pdm
|
|
117
|
+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
|
118
|
+
# pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
|
|
119
|
+
# https://pdm-project.org/en/latest/usage/project/#working-with-version-control
|
|
120
|
+
# pdm.lock
|
|
121
|
+
# pdm.toml
|
|
122
|
+
.pdm-python
|
|
123
|
+
.pdm-build/
|
|
124
|
+
|
|
125
|
+
# pixi
|
|
126
|
+
# Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
|
|
127
|
+
# pixi.lock
|
|
128
|
+
# Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
|
|
129
|
+
# in the .venv directory. It is recommended not to include this directory in version control.
|
|
130
|
+
.pixi/*
|
|
131
|
+
!.pixi/config.toml
|
|
132
|
+
|
|
133
|
+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
|
134
|
+
__pypackages__/
|
|
135
|
+
|
|
136
|
+
# Celery stuff
|
|
137
|
+
celerybeat-schedule*
|
|
138
|
+
celerybeat.pid
|
|
139
|
+
|
|
140
|
+
# Redis
|
|
141
|
+
*.rdb
|
|
142
|
+
*.aof
|
|
143
|
+
*.pid
|
|
144
|
+
|
|
145
|
+
# RabbitMQ
|
|
146
|
+
mnesia/
|
|
147
|
+
rabbitmq/
|
|
148
|
+
rabbitmq-data/
|
|
149
|
+
|
|
150
|
+
# ActiveMQ
|
|
151
|
+
activemq-data/
|
|
152
|
+
|
|
153
|
+
# SageMath parsed files
|
|
154
|
+
*.sage.py
|
|
155
|
+
|
|
156
|
+
# Environments
|
|
157
|
+
.env
|
|
158
|
+
.envrc
|
|
159
|
+
.venv
|
|
160
|
+
env/
|
|
161
|
+
venv/
|
|
162
|
+
ENV/
|
|
163
|
+
env.bak/
|
|
164
|
+
venv.bak/
|
|
165
|
+
|
|
166
|
+
# Spyder project settings
|
|
167
|
+
.spyderproject
|
|
168
|
+
.spyproject
|
|
169
|
+
|
|
170
|
+
# Rope project settings
|
|
171
|
+
.ropeproject
|
|
172
|
+
|
|
173
|
+
# mkdocs documentation
|
|
174
|
+
/site
|
|
175
|
+
|
|
176
|
+
# mypy
|
|
177
|
+
.mypy_cache/
|
|
178
|
+
.dmypy.json
|
|
179
|
+
dmypy.json
|
|
180
|
+
|
|
181
|
+
# Pyre type checker
|
|
182
|
+
.pyre/
|
|
183
|
+
|
|
184
|
+
# pytype static type analyzer
|
|
185
|
+
.pytype/
|
|
186
|
+
|
|
187
|
+
# Cython debug symbols
|
|
188
|
+
cython_debug/
|
|
189
|
+
|
|
190
|
+
# PyCharm
|
|
191
|
+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
|
192
|
+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
|
193
|
+
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
|
194
|
+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
|
195
|
+
# .idea/
|
|
196
|
+
|
|
197
|
+
# Abstra
|
|
198
|
+
# Abstra is an AI-powered process automation framework.
|
|
199
|
+
# Ignore directories containing user credentials, local state, and settings.
|
|
200
|
+
# Learn more at https://abstra.io/docs
|
|
201
|
+
.abstra/
|
|
202
|
+
|
|
203
|
+
# Visual Studio Code
|
|
204
|
+
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
|
|
205
|
+
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
|
|
206
|
+
# and can be added to the global gitignore or merged into this file. However, if you prefer,
|
|
207
|
+
# you could uncomment the following to ignore the entire vscode folder
|
|
208
|
+
.vscode/
|
|
209
|
+
# Temporary file for partial code execution
|
|
210
|
+
tempCodeRunnerFile.py
|
|
211
|
+
|
|
212
|
+
# Ruff stuff:
|
|
213
|
+
.ruff_cache/
|
|
214
|
+
|
|
215
|
+
# PyPI configuration file
|
|
216
|
+
.pypirc
|
|
217
|
+
|
|
218
|
+
# Marimo
|
|
219
|
+
marimo/_static/
|
|
220
|
+
marimo/_lsp/
|
|
221
|
+
__marimo__/
|
|
222
|
+
|
|
223
|
+
# Streamlit
|
|
224
|
+
.streamlit/secrets.toml
|
|
225
|
+
package-lock.json
|
|
@@ -0,0 +1,427 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: stealth-browserctl
|
|
3
|
+
Version: 0.0.1
|
|
4
|
+
Summary: Browser automation toolkit with AI-powered assistant and proxy validation
|
|
5
|
+
Author-email: flyingyizi <flyingyizi@gmail.com>
|
|
6
|
+
Requires-Python: >=3.11
|
|
7
|
+
Requires-Dist: loguru>=0.7.2
|
|
8
|
+
Requires-Dist: mitmproxy>=11.0.2
|
|
9
|
+
Requires-Dist: packaging>=24.0
|
|
10
|
+
Requires-Dist: pydantic>=2.13.3
|
|
11
|
+
Requires-Dist: python-daemon>=3.1.2
|
|
12
|
+
Requires-Dist: requests>=2.34.2
|
|
13
|
+
Requires-Dist: shortuuid>=1.0.13
|
|
14
|
+
Requires-Dist: typer>=0.24.2
|
|
15
|
+
Requires-Dist: websockets>=16.0
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# BrowserCtl
|
|
19
|
+
|
|
20
|
+
A browser automation toolkit for AI agents using undetected-chromedriver with daemon-based session management.
|
|
21
|
+
|
|
22
|
+
## Overview
|
|
23
|
+
|
|
24
|
+
BrowserCtl is a command-line interface for browser automation that integrates seamlessly with AI agents. It uses a **daemon server architecture** to maintain browser sessions across multiple command invocations, allowing you to execute multiple commands that operate on the same browser instance.
|
|
25
|
+
|
|
26
|
+
## Architecture
|
|
27
|
+
|
|
28
|
+
The tool consists of two main components:
|
|
29
|
+
|
|
30
|
+
1. **Daemon Server** (`browserctl daemon`): A background process that manages browser sessions
|
|
31
|
+
2. **CLI Client**: Commands that communicate with the daemon via Unix sockets
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
## Features
|
|
36
|
+
|
|
37
|
+
- **Browser Automation**: Open, close, and control browser sessions
|
|
38
|
+
- **Page Navigation**: Navigate to URLs, go back/forward, reload pages
|
|
39
|
+
- **Element Interaction**: Click, type, fill forms, drag and drop
|
|
40
|
+
- **Tab Management**: Create, close, and switch between tabs
|
|
41
|
+
- **Storage Management**: Handle cookies, localStorage, and sessionStorage
|
|
42
|
+
- **Network Control**: Route interception and network monitoring
|
|
43
|
+
- **DevTools Integration**: Console logs, performance tracing, element inspection
|
|
44
|
+
- **Multi-Session Support**: Run multiple isolated browser sessions
|
|
45
|
+
- **Stealth Mode**: Uses undetected-chromedriver to avoid detection
|
|
46
|
+
|
|
47
|
+
## Installation
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
# Install using uv
|
|
51
|
+
uv tool install browserctl
|
|
52
|
+
|
|
53
|
+
# Or run directly
|
|
54
|
+
uv run browserctl --help
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Quick Start
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
# Start the daemon (optional - will auto-start on first command)
|
|
61
|
+
browserctl daemon start
|
|
62
|
+
|
|
63
|
+
# Open a browser
|
|
64
|
+
browserctl open https://example.com
|
|
65
|
+
|
|
66
|
+
# Take a snapshot
|
|
67
|
+
browserctl snapshot
|
|
68
|
+
|
|
69
|
+
# Click an element (using ref from snapshot)
|
|
70
|
+
browserctl click e15
|
|
71
|
+
|
|
72
|
+
# Type text
|
|
73
|
+
browserctl type "search query"
|
|
74
|
+
|
|
75
|
+
# Press a key
|
|
76
|
+
browserctl press Enter
|
|
77
|
+
|
|
78
|
+
# Take a screenshot
|
|
79
|
+
browserctl screenshot
|
|
80
|
+
|
|
81
|
+
# Close the browser
|
|
82
|
+
browserctl close
|
|
83
|
+
|
|
84
|
+
# Stop the daemon
|
|
85
|
+
browserctl daemon stop
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Daemon Management
|
|
89
|
+
|
|
90
|
+
The daemon server manages all browser sessions:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Start daemon
|
|
94
|
+
browserctl daemon start
|
|
95
|
+
|
|
96
|
+
# Check daemon status
|
|
97
|
+
browserctl daemon status
|
|
98
|
+
|
|
99
|
+
# Stop daemon
|
|
100
|
+
browserctl daemon stop
|
|
101
|
+
|
|
102
|
+
# Restart daemon
|
|
103
|
+
browserctl daemon restart
|
|
104
|
+
|
|
105
|
+
# Run daemon in foreground (for debugging)
|
|
106
|
+
browserctl daemon start --foreground
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Multi-Command Session Example
|
|
110
|
+
|
|
111
|
+
This demonstrates the key feature - multiple commands operating on the same browser:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Command 1: Open browser in session "mysession"
|
|
115
|
+
browserctl open https://example.com --session mysession
|
|
116
|
+
|
|
117
|
+
# Command 2: Open new tab in the same session
|
|
118
|
+
browserctl tab-new https://example.com/other --session mysession
|
|
119
|
+
|
|
120
|
+
# Command 3: List tabs (shows both tabs)
|
|
121
|
+
browserctl tab-list --session mysession
|
|
122
|
+
|
|
123
|
+
# Command 4: Take screenshot
|
|
124
|
+
browserctl screenshot --session mysession
|
|
125
|
+
|
|
126
|
+
# Command 5: Close the session
|
|
127
|
+
browserctl close --session mysession
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
All these commands operate on the **same browser instance** because they use the same session name.
|
|
131
|
+
|
|
132
|
+
## Commands
|
|
133
|
+
|
|
134
|
+
### Core Commands
|
|
135
|
+
|
|
136
|
+
- `open [URL]` - Open a new browser session
|
|
137
|
+
- `close` - Close the browser session
|
|
138
|
+
- `goto <URL>` - Navigate to a URL
|
|
139
|
+
- `snapshot` - Take a page snapshot
|
|
140
|
+
- `screenshot` - Take a screenshot
|
|
141
|
+
- `pdf` - Save page as PDF
|
|
142
|
+
- `resize <width> <height>` - Resize viewport
|
|
143
|
+
- `eval <script>` - Execute JavaScript
|
|
144
|
+
|
|
145
|
+
### Interaction Commands
|
|
146
|
+
|
|
147
|
+
- `click <selector>` - Click an element
|
|
148
|
+
- `dblclick <selector>` - Double-click an element
|
|
149
|
+
- `type <text>` - Type text into focused element
|
|
150
|
+
- `fill <selector> <value>` - Fill an input field
|
|
151
|
+
- `press <key>` - Press a key
|
|
152
|
+
- `hover <selector>` - Hover over an element
|
|
153
|
+
- `drag <source> <target>` - Drag and drop
|
|
154
|
+
- `select <selector> <value>` - Select option
|
|
155
|
+
- `upload <file>` - Upload a file
|
|
156
|
+
- `check <selector>` - Check checkbox
|
|
157
|
+
- `uncheck <selector>` - Uncheck checkbox
|
|
158
|
+
|
|
159
|
+
### Navigation Commands
|
|
160
|
+
|
|
161
|
+
- `go-back` - Navigate back
|
|
162
|
+
- `go-forward` - Navigate forward
|
|
163
|
+
- `reload` - Reload page
|
|
164
|
+
|
|
165
|
+
### Tab Commands
|
|
166
|
+
|
|
167
|
+
- `tab-list` - List all tabs
|
|
168
|
+
- `tab-new [URL]` - Open new tab
|
|
169
|
+
- `tab-close [index]` - Close tab
|
|
170
|
+
- `tab-select <index>` - Select tab
|
|
171
|
+
|
|
172
|
+
### Storage Commands
|
|
173
|
+
|
|
174
|
+
- `state-save [filename]` - Save browser state
|
|
175
|
+
- `state-load <filename>` - Load browser state
|
|
176
|
+
- `cookie-list` - List cookies
|
|
177
|
+
- `cookie-get <name>` - Get cookie value
|
|
178
|
+
- `cookie-set <name> <value>` - Set cookie
|
|
179
|
+
- `cookie-delete <name>` - Delete cookie
|
|
180
|
+
- `cookie-clear` - Clear all cookies
|
|
181
|
+
- `localstorage-list` - List localStorage
|
|
182
|
+
- `localstorage-get <key>` - Get localStorage item
|
|
183
|
+
- `localstorage-set <key> <value>` - Set localStorage item
|
|
184
|
+
- `localstorage-delete <key>` - Delete localStorage item
|
|
185
|
+
- `localstorage-clear` - Clear localStorage
|
|
186
|
+
- `sessionstorage-*` - Similar commands for sessionStorage
|
|
187
|
+
|
|
188
|
+
### Network Commands
|
|
189
|
+
|
|
190
|
+
- `route <pattern>` - Set network route
|
|
191
|
+
- `route-list` - List routes
|
|
192
|
+
- `unroute [pattern]` - Remove route
|
|
193
|
+
|
|
194
|
+
### DevTools Commands
|
|
195
|
+
|
|
196
|
+
- `console` - Show console logs
|
|
197
|
+
- `network` - Show network logs
|
|
198
|
+
- `run-code <code>` - Run custom code
|
|
199
|
+
- `tracing-start` - Start performance tracing
|
|
200
|
+
- `tracing-stop` - Stop performance tracing
|
|
201
|
+
- `pick` - Pick element interactively
|
|
202
|
+
- `highlight <selector>` - Highlight element
|
|
203
|
+
|
|
204
|
+
### Session Management
|
|
205
|
+
|
|
206
|
+
- `list` - List all browser sessions
|
|
207
|
+
- `close-all` - Close all sessions
|
|
208
|
+
- `kill-all` - Kill all browser processes
|
|
209
|
+
- `delete-data` - Delete session data
|
|
210
|
+
|
|
211
|
+
## Multi-Session Support
|
|
212
|
+
|
|
213
|
+
Run multiple isolated browser sessions:
|
|
214
|
+
|
|
215
|
+
```bash
|
|
216
|
+
# Session 1
|
|
217
|
+
browserctl -s=session1 open https://site1.com
|
|
218
|
+
|
|
219
|
+
# Session 2
|
|
220
|
+
browserctl -s=session2 open https://site2.com
|
|
221
|
+
|
|
222
|
+
# Work with session 1
|
|
223
|
+
browserctl -s=session1 snapshot
|
|
224
|
+
|
|
225
|
+
# Work with session 2
|
|
226
|
+
browserctl -s=session2 snapshot
|
|
227
|
+
|
|
228
|
+
# Close all
|
|
229
|
+
browserctl close-all
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Options
|
|
233
|
+
|
|
234
|
+
### Global Options
|
|
235
|
+
|
|
236
|
+
- `-s, --session <name>` - Browser session name
|
|
237
|
+
- `--raw` - Output raw data without formatting
|
|
238
|
+
- `--json` - Output as JSON
|
|
239
|
+
|
|
240
|
+
### Browser Options
|
|
241
|
+
|
|
242
|
+
- `--browser <type>` - Browser type (chrome, firefox, webkit, msedge)
|
|
243
|
+
- `--persistent` - Use persistent profile
|
|
244
|
+
- `--profile <path>` - Custom profile directory
|
|
245
|
+
- `--headed` - Run in headed mode (visible browser)
|
|
246
|
+
- `--config <file>` - Configuration file
|
|
247
|
+
|
|
248
|
+
## Element Selectors
|
|
249
|
+
|
|
250
|
+
Elements can be selected using:
|
|
251
|
+
|
|
252
|
+
1. **Refs** - From snapshot (e.g., `e15`)
|
|
253
|
+
2. **CSS Selectors** - Standard CSS (e.g., `#main > button.submit`)
|
|
254
|
+
3. **selenium Locators** -
|
|
255
|
+
4. **Test IDs** - (e.g., `getByTestId('submit-button')`)
|
|
256
|
+
|
|
257
|
+
## Examples
|
|
258
|
+
|
|
259
|
+
### Form Submission
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
browserctl open https://example.com/form
|
|
263
|
+
browserctl snapshot
|
|
264
|
+
browserctl fill e1 "user@example.com"
|
|
265
|
+
browserctl fill e2 "password123"
|
|
266
|
+
browserctl click e3
|
|
267
|
+
browserctl snapshot
|
|
268
|
+
browserctl close
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Multi-Tab Workflow
|
|
272
|
+
|
|
273
|
+
```bash
|
|
274
|
+
browserctl open https://example.com
|
|
275
|
+
browserctl tab-new https://example.com/other
|
|
276
|
+
browserctl tab-list
|
|
277
|
+
browserctl tab-select 0
|
|
278
|
+
browserctl snapshot
|
|
279
|
+
browserctl close
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### Authentication Flow
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# Save authentication state
|
|
286
|
+
browserctl open https://app.example.com/login
|
|
287
|
+
browserctl fill "#email" "user@example.com"
|
|
288
|
+
browserctl fill "#password" "password"
|
|
289
|
+
browserctl click "#submit"
|
|
290
|
+
browserctl state-save auth.json
|
|
291
|
+
browserctl close
|
|
292
|
+
|
|
293
|
+
# Later, load authentication state
|
|
294
|
+
browserctl open https://app.example.com
|
|
295
|
+
browserctl state-load auth.json
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
## Architecture
|
|
299
|
+
|
|
300
|
+
The project is structured as follows:
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
browserctl/
|
|
304
|
+
├── src/
|
|
305
|
+
│ ├── stealth_cli/ # Main package entry point
|
|
306
|
+
│ │ └── __init__.py
|
|
307
|
+
│ └── cli_client/ # CLI implementation
|
|
308
|
+
│ ├── __init__.py # Typer app and command definitions
|
|
309
|
+
│ ├── browser.py # Browser manager and session handling
|
|
310
|
+
│ └── commands/ # Command implementations
|
|
311
|
+
│ ├── core_commands.py
|
|
312
|
+
│ ├── interaction_commands.py
|
|
313
|
+
│ ├── navigation_commands.py
|
|
314
|
+
│ ├── tab_commands.py
|
|
315
|
+
│ ├── storage_commands.py
|
|
316
|
+
│ ├── network_commands.py
|
|
317
|
+
│ ├── devtools_commands.py
|
|
318
|
+
│ └── session_commands.py
|
|
319
|
+
├── pyproject.toml
|
|
320
|
+
└── README.md
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
## Dependencies
|
|
324
|
+
|
|
325
|
+
- **typer** - CLI framework
|
|
326
|
+
- **undetected-chromedriver** - Stealth browser automation
|
|
327
|
+
- **selenium** - Browser automation framework
|
|
328
|
+
- **pydantic** - Data validation
|
|
329
|
+
- **loguru** - Logging
|
|
330
|
+
|
|
331
|
+
## Development
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# Install dependencies
|
|
335
|
+
uv sync
|
|
336
|
+
|
|
337
|
+
# Run CLI
|
|
338
|
+
uv run browserctl --help
|
|
339
|
+
|
|
340
|
+
# Run tests
|
|
341
|
+
python test_basic.py
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
## License
|
|
345
|
+
|
|
346
|
+
MIT License
|
|
347
|
+
|
|
348
|
+
## Contributing
|
|
349
|
+
|
|
350
|
+
Contributions are welcome! Please submit pull requests or open issues on the repository.
|
|
351
|
+
|
|
352
|
+
# 检测网站
|
|
353
|
+
|
|
354
|
+
https://bot.sannysoft.com/
|
|
355
|
+
|
|
356
|
+
## 1. [BrowserLeaks](https://browserleaks.com/)
|
|
357
|
+
|
|
358
|
+
BrowserLeaks 显示泄露的个人数据,并提供相关文章帮助你理解每个部分和如何更好地保护自己。
|
|
359
|
+
|
|
360
|
+
### 检测项目
|
|
361
|
+
|
|
362
|
+
- IP 地址
|
|
363
|
+
- JavaScript
|
|
364
|
+
- WebRTC 泄露测试
|
|
365
|
+
- Canvas 指纹
|
|
366
|
+
- WebGL 报告
|
|
367
|
+
- 字体指纹
|
|
368
|
+
- 地理位置 API
|
|
369
|
+
- 功能检测
|
|
370
|
+
- 内容过滤器
|
|
371
|
+
- Java Applet
|
|
372
|
+
- Flash Player
|
|
373
|
+
- Silverlight
|
|
374
|
+
|
|
375
|
+
注意在使用前阅读其隐私政策以确保数据不被第三方服务收集。
|
|
376
|
+
|
|
377
|
+
## 2. [AmIUnique](https://amiunique.org/)
|
|
378
|
+
|
|
379
|
+
AmIUnique 不仅提供关于配置的信息,还研究浏览器指纹的多样性。点击主页上的“查看我的浏览器指纹”按钮即可测试。
|
|
380
|
+
|
|
381
|
+
|
|
382
|
+
### 检测信息
|
|
383
|
+
|
|
384
|
+
- 操作系统
|
|
385
|
+
- 浏览器及版本
|
|
386
|
+
- 时区和语言
|
|
387
|
+
- HTTP headers 属性
|
|
388
|
+
- JavaScript 属性
|
|
389
|
+
|
|
390
|
+
## 3. [Cover Your Tracks](https://coveryourtracks.eff.org/)
|
|
391
|
+
|
|
392
|
+
Cover Your Tracks 帮助你了解自己在追踪器面前的表现,并提供保护建议。
|
|
393
|
+
|
|
394
|
+
|
|
395
|
+
### 功能
|
|
396
|
+
|
|
397
|
+
- 提供详细的检测结果
|
|
398
|
+
- 提供保护建议
|
|
399
|
+
|
|
400
|
+
## 4. [Device Info](https://www.deviceinfo.me/)
|
|
401
|
+
|
|
402
|
+
Device Info 测试多个浏览器指纹指标,提供详细信息。
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
## 5. [CreepJS](https://abrahamjuliot.github.io/creepjs/)
|
|
406
|
+
|
|
407
|
+
CreepJS 提供详细的指纹分析,显示用户相同元素的比例。
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
## 6. [BrowserSPY](http://browserspy.dk/vbscript.php)
|
|
411
|
+
|
|
412
|
+
BrowserSPY 自 1999 年起提供服务,允许用户选择特定元素进行测试。
|
|
413
|
+
|
|
414
|
+
|
|
415
|
+
## 7. [Leaks Radar](https://leaksradar.com/index#allInformation)
|
|
416
|
+
|
|
417
|
+
Leaks Radar 提供基本信息,并在“指纹”部分提供浏览器指纹知识。
|
|
418
|
+
|
|
419
|
+
|
|
420
|
+
## 8. [Pixelscan](https://pixelscan.net/)
|
|
421
|
+
|
|
422
|
+
Pixelscan 检测浏览器指纹参数之间的不规则连接。
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
## 9. [Iphey](https://iphey.com/)
|
|
426
|
+
|
|
427
|
+
Iphey 检查你的数字身份是否可信,提供详细信息。
|