| name | tor-browser |
| description | Headless browser automation with Tor SOCKS5 proxy support for accessing .onion sites and anonymous browsing. Use when navigating dark web resources, scraping Tor hidden services, conducting security research on dark web forums, or when anonymity is required. Supports navigation, element interaction, screenshots, and data extraction through Tor network. |
| metadata | {"openclaw":{"emoji":"onion","category":"browser-automation","version":"1.1.0","author":"OpenClaw","requirements":["python >= 3.8","playwright","tor service running on socks5://127.0.0.1:9050"],"allowed-tools":["Bash"]}} |
Tor Browser Automation
Headless browser automation with Tor SOCKS5 proxy support for accessing .onion sites and anonymous web browsing.
Prerequisites
- Tor service running with SOCKS5 proxy on port 9050
- Python 3.8+
- Playwright with Chromium browser
Quick setup:
sudo apt install tor && sudo systemctl start tor
pip install playwright
playwright install chromium
Quick Start
tor-browser check-tor
tor-browser open http://3g2upl4pq6kufc4m.onion
tor-browser snapshot -i
tor-browser click @e1
tor-browser screenshot -o output.png --full
Commands
Navigation
tor-browser open <url> [--proxy socks5://host:port]
tor-browser check-tor
Page Analysis
tor-browser snapshot
tor-browser snapshot -i
tor-browser links
tor-browser gettext
tor-browser gettext --ref @e5
Interaction
tor-browser click @e1
tor-browser fill @e2 "text to enter"
tor-browser wait 2000
Screenshots
tor-browser screenshot
tor-browser screenshot -o capture.png
tor-browser screenshot --full -o page.png
Python API
from scripts.tor_browser import TorBrowser, Config
import asyncio
async def main():
config = Config(
tor_proxy="socks5://127.0.0.1:9050",
headless=True,
timeout=30000
)
browser = TorBrowser(config)
await browser.start()
result = await browser.navigate("http://3g2upl4pq6kufc4m.onion")
print(f"Loaded: {result['title']}")
snapshot = await browser.get_snapshot(interactive_only=True)
for elem in snapshot['elements']:
print(f"{elem['ref']}: {elem['tag']} - {elem['text'][:30]}")
await browser.fill("@e2", "search query")
await browser.click("@e3")
links = await browser.extract_links()
for link in links:
print(f"{link['text']}: {link[]}")
browser.close()
asyncio.run(main())
Configuration Options
| Option | Default | Description |
|---|
tor_proxy | socks5://127.0.0.1:9050 | Tor SOCKS5 proxy URL |
headless | true | Run without GUI |
timeout | 30000 | Page load timeout (ms) |
user_agent | Tor Browser UA | Browser user agent |
viewport | 1920x1080 | Browser viewport size |
Security & Legal
Intended Use:
- Security research and threat intelligence
- Anonymous web scraping of public dark web resources
- Testing .onion site accessibility
- Privacy-preserving web automation
Important:
- Only use for legal purposes
- Respect site Terms of Service
- Do not use for unauthorized access
- Comply with local laws regarding dark web access
- Be aware that some activities may be monitored
Troubleshooting
Tor Connection Issues
sudo systemctl status tor
curl --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip
sudo journalctl -u tor -f
Common Errors
Connection refused:
- Ensure Tor service is started
- Check firewall rules
- Verify proxy URL
Timeout:
- .onion sites may be slow; increase timeout
- Try different Tor circuits: restart Tor service
CAPTCHA blocking:
- Use
--headed mode to manually solve
- Some sites block automation
Docker Setup
FROM python:3.11-slim
RUN apt-get update && apt-get install -y tor
RUN pip install playwright && playwright install chromium
COPY . /app
WORKDIR /app
CMD ["tor-browser", "check-tor"]
References
License
MIT - See original licenses for Playwright and Tor Project components.