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.
Files changed (146) hide show
  1. stealth_browserctl-0.0.1/.codeartsdoer/.gitignore +1 -0
  2. stealth_browserctl-0.0.1/.gitignore +225 -0
  3. stealth_browserctl-0.0.1/PKG-INFO +427 -0
  4. stealth_browserctl-0.0.1/README.md +410 -0
  5. stealth_browserctl-0.0.1/docs/INSTALL_FROM_TESTPYPI.md +28 -0
  6. stealth_browserctl-0.0.1/docs/chromedriver_anti_detection.md +267 -0
  7. stealth_browserctl-0.0.1/docs/mitmproxy_addon_events.md +368 -0
  8. stealth_browserctl-0.0.1/pyproject.toml +34 -0
  9. stealth_browserctl-0.0.1/src/backend/__init__.py +18 -0
  10. stealth_browserctl-0.0.1/src/backend/constants.py +20 -0
  11. stealth_browserctl-0.0.1/src/backend/daemon_client.py +109 -0
  12. stealth_browserctl-0.0.1/src/backend/daemon_server/README.md +143 -0
  13. stealth_browserctl-0.0.1/src/backend/daemon_server/__init__.py +6 -0
  14. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/__init__.py +17 -0
  15. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/__init__.py +11 -0
  16. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/__init__.py +22 -0
  17. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/base.py +123 -0
  18. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/generator_dom.py +89 -0
  19. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/types.py +57 -0
  20. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/aria/types_generated.py +60 -0
  21. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/ariasnapshot/manager.py +231 -0
  22. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/browser.py +505 -0
  23. stealth_browserctl-0.0.1/src/backend/daemon_server/browser/session_config.py +381 -0
  24. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/__init__.py +23 -0
  25. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/base_handler.py +122 -0
  26. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/core_commands.py +243 -0
  27. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/devtools_commands.py +257 -0
  28. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/dialog_commands.py +35 -0
  29. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/input_commands.py +153 -0
  30. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/interaction_commands.py +289 -0
  31. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/navigation_commands.py +144 -0
  32. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/proxy_commands.py +119 -0
  33. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/session_commands.py +72 -0
  34. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/storage_commands.py +278 -0
  35. stealth_browserctl-0.0.1/src/backend/daemon_server/commands/web_commands.py +362 -0
  36. stealth_browserctl-0.0.1/src/backend/daemon_server/errors.py +193 -0
  37. stealth_browserctl-0.0.1/src/backend/daemon_server/models.py +67 -0
  38. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/README.md +73 -0
  39. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/__init__.py +0 -0
  40. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/compiled/ariaSnapshot.js +1154 -0
  41. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/package.json +16 -0
  42. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/script_loader.py +115 -0
  43. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/tsconfig.json +17 -0
  44. stealth_browserctl-0.0.1/src/backend/daemon_server/scripts/typescript/ariaSnapshot.ts +1380 -0
  45. stealth_browserctl-0.0.1/src/backend/daemon_server/server.py +184 -0
  46. stealth_browserctl-0.0.1/src/backend/daemon_server.py +143 -0
  47. stealth_browserctl-0.0.1/src/backend/flow/__init__.py +31 -0
  48. stealth_browserctl-0.0.1/src/backend/flow/mitm/__init__.py +25 -0
  49. stealth_browserctl-0.0.1/src/backend/flow/mitm/ca.crt +30 -0
  50. stealth_browserctl-0.0.1/src/backend/flow/mitm/ca.key +52 -0
  51. stealth_browserctl-0.0.1/src/backend/flow/mitm/config.py +320 -0
  52. stealth_browserctl-0.0.1/src/backend/flow/mitm/cust_addons.py +418 -0
  53. stealth_browserctl-0.0.1/src/backend/flow/mitm/custom_upstream_auth.py +57 -0
  54. stealth_browserctl-0.0.1/src/backend/flow/mitm/inspect.py +290 -0
  55. stealth_browserctl-0.0.1/src/backend/flow/mitm/modifier.py +348 -0
  56. stealth_browserctl-0.0.1/src/backend/flow/mitm/request.py +414 -0
  57. stealth_browserctl-0.0.1/src/backend/flow/mitm/server.py +478 -0
  58. stealth_browserctl-0.0.1/src/backend/flow/mitm/tab_storage.py +781 -0
  59. stealth_browserctl-0.0.1/src/backend/flow/mitm/utils.py +138 -0
  60. stealth_browserctl-0.0.1/src/backend/flow/v2ray/__init__.py +26 -0
  61. stealth_browserctl-0.0.1/src/backend/flow/v2ray/config.py +1156 -0
  62. stealth_browserctl-0.0.1/src/backend/flow/v2ray/daemon_process.py +309 -0
  63. stealth_browserctl-0.0.1/src/backend/flow/v2ray/manager.py +609 -0
  64. stealth_browserctl-0.0.1/src/backend/flow/v2ray/pool.py +161 -0
  65. stealth_browserctl-0.0.1/src/backend/flow/v2ray/process.py +327 -0
  66. stealth_browserctl-0.0.1/src/backend/flow/v2ray/proxy_airport_cli.py +152 -0
  67. stealth_browserctl-0.0.1/src/backend/flow/v2ray/subscribers.py +120 -0
  68. stealth_browserctl-0.0.1/src/backend/human/__init__.py +336 -0
  69. stealth_browserctl-0.0.1/src/backend/human/config.py +114 -0
  70. stealth_browserctl-0.0.1/src/backend/human/keyboard.py +145 -0
  71. stealth_browserctl-0.0.1/src/backend/human/mouse.py +172 -0
  72. stealth_browserctl-0.0.1/src/backend/human/scroll.py +240 -0
  73. stealth_browserctl-0.0.1/src/backend/undetected/__init__.py +1042 -0
  74. stealth_browserctl-0.0.1/src/backend/undetected/readme.me +11 -0
  75. stealth_browserctl-0.0.1/src/backend/undetected/stealth/__init__.py +53 -0
  76. stealth_browserctl-0.0.1/src/backend/undetected/stealth/compiled/stealth.js +1022 -0
  77. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/0_utils.ts +277 -0
  78. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.app.ts +75 -0
  79. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.csi.ts +32 -0
  80. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.loadTimes.ts +109 -0
  81. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/chrome.runtime.ts +234 -0
  82. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/hairline.fix.ts +13 -0
  83. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/iframe.contentWindow.ts +77 -0
  84. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/media.codecs.ts +50 -0
  85. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.languages.ts +7 -0
  86. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.permissions.ts +23 -0
  87. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.plugins.ts +216 -0
  88. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.vendor.ts +7 -0
  89. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.webdriver.ts +5 -0
  90. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/navigator.webrtc.ts +11 -0
  91. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/readme.md +3 -0
  92. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/stealth.entry.ts +46 -0
  93. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/tsconfig.json +17 -0
  94. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/webgl.vendor.ts +24 -0
  95. stealth_browserctl-0.0.1/src/backend/undetected/stealth/typescript/window.outerdimensions.ts +12 -0
  96. stealth_browserctl-0.0.1/src/backend/undetected/undetected_chrome/__init__.py +60 -0
  97. stealth_browserctl-0.0.1/src/backend/undetected/undetected_chrome/patcher.py +425 -0
  98. stealth_browserctl-0.0.1/src/backend/undetected/undetected_firefox/__init__.py +52 -0
  99. stealth_browserctl-0.0.1/src/backend/undetected/undetected_firefox/constants.py +49 -0
  100. stealth_browserctl-0.0.1/src/backend/undetected/undetected_firefox/patcher.py +286 -0
  101. stealth_browserctl-0.0.1/src/cli/__init__.py +8 -0
  102. stealth_browserctl-0.0.1/src/dsh-plugin/.gitignore +4 -0
  103. stealth_browserctl-0.0.1/src/dsh-plugin/README.md +185 -0
  104. stealth_browserctl-0.0.1/src/dsh-plugin/assets/skill/SKILL.md +821 -0
  105. stealth_browserctl-0.0.1/src/dsh-plugin/assets/skill/references/session-management.md +116 -0
  106. stealth_browserctl-0.0.1/src/dsh-plugin/cordis.patch.yml +4 -0
  107. stealth_browserctl-0.0.1/src/dsh-plugin/package.json +79 -0
  108. stealth_browserctl-0.0.1/src/dsh-plugin/scripts/build-client.mjs +87 -0
  109. stealth_browserctl-0.0.1/src/dsh-plugin/src/client.tsx +334 -0
  110. stealth_browserctl-0.0.1/src/dsh-plugin/src/config.ts +133 -0
  111. stealth_browserctl-0.0.1/src/dsh-plugin/src/exposure.ts +263 -0
  112. stealth_browserctl-0.0.1/src/dsh-plugin/src/index.ts +232 -0
  113. stealth_browserctl-0.0.1/src/dsh-plugin/src/proxycheck-tools.ts +215 -0
  114. stealth_browserctl-0.0.1/src/dsh-plugin/src/skill.ts +43 -0
  115. stealth_browserctl-0.0.1/src/dsh-plugin/src/tools.ts +234 -0
  116. stealth_browserctl-0.0.1/src/dsh-plugin/src/upstream.ts +264 -0
  117. stealth_browserctl-0.0.1/src/dsh-plugin/src/web-search-tools.ts +312 -0
  118. stealth_browserctl-0.0.1/src/dsh-plugin/tsconfig.client.json +31 -0
  119. stealth_browserctl-0.0.1/src/dsh-plugin/tsconfig.json +32 -0
  120. stealth_browserctl-0.0.1/src/frontend/__init__.py +6 -0
  121. stealth_browserctl-0.0.1/src/frontend/commands/__init__.py +1 -0
  122. stealth_browserctl-0.0.1/src/frontend/commands/core.py +238 -0
  123. stealth_browserctl-0.0.1/src/frontend/commands/devtools.py +412 -0
  124. stealth_browserctl-0.0.1/src/frontend/commands/input.py +121 -0
  125. stealth_browserctl-0.0.1/src/frontend/commands/interaction.py +218 -0
  126. stealth_browserctl-0.0.1/src/frontend/commands/navigation.py +128 -0
  127. stealth_browserctl-0.0.1/src/frontend/commands/proxy.py +227 -0
  128. stealth_browserctl-0.0.1/src/frontend/commands/session.py +119 -0
  129. stealth_browserctl-0.0.1/src/frontend/commands/storage.py +243 -0
  130. stealth_browserctl-0.0.1/src/frontend/commands/web.py +105 -0
  131. stealth_browserctl-0.0.1/src/frontend/main.py +179 -0
  132. stealth_browserctl-0.0.1/src/frontend/skill/browserctl/SKILL.md +786 -0
  133. stealth_browserctl-0.0.1/src/frontend/skill/browserctl/references/session-management.md +200 -0
  134. stealth_browserctl-0.0.1/src/webdriver_bidi/README.md +666 -0
  135. stealth_browserctl-0.0.1/src/webdriver_bidi/__init__.py +597 -0
  136. stealth_browserctl-0.0.1/src/webdriver_bidi/actions.py +1799 -0
  137. stealth_browserctl-0.0.1/src/webdriver_bidi/driver.py +244 -0
  138. stealth_browserctl-0.0.1/src/webdriver_bidi/errors.py +26 -0
  139. stealth_browserctl-0.0.1/src/webdriver_bidi/local_value.py +172 -0
  140. stealth_browserctl-0.0.1/src/webdriver_bidi/locator.py +1549 -0
  141. stealth_browserctl-0.0.1/src/webdriver_bidi/messenger.py +194 -0
  142. stealth_browserctl-0.0.1/src/webdriver_bidi/models.py +1119 -0
  143. stealth_browserctl-0.0.1/src/webdriver_bidi/session.py +433 -0
  144. stealth_browserctl-0.0.1/src/webdriver_bidi/test_bidi.ipynb +268 -0
  145. stealth_browserctl-0.0.1/src/webdriver_bidi/wait.py +428 -0
  146. stealth_browserctl-0.0.1/test_ucbrowser.ipynb +361 -0
@@ -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 检查你的数字身份是否可信,提供详细信息。