A Chrome extension that executes changedetection.io-style browser automation commands via Server-Sent Events (SSE). The extension can automatically capture HTML content and process it with BeautifulSoup for analysis.
The browser step command list is retrieved from sse-server.py when the Chrome browser first starts by a little hack that triggers the connection on the first network IO. (Or else the chrome extension would need clicking)
First time usage-
sse-server.py runningfetch-page.sh and enable the extension and 'debug mode' in extension config, close it.fetch-page.sh to test (it will re-use the same chrome profile)(see below for more details),
chrome-extension/
├── manifest.json # Chrome extension manifest
├── background.js # Extension background service worker
├── browser-steps.js # Browser automation step implementations
├── popup.html # Extension popup UI
├── popup.js # Popup UI logic
├── sse-server.py # Python SSE server
├── requirements.txt # Python dependencies
├── fetch-page.sh # Chrome launcher script
└── README.md # This file
pip install -r requirements.txt
chrome://extensions/# Start server with target URL
python3 sse-server.py -u "https://www.costco.com/.product.100736527.html"
# Or use any other URL
python3 sse-server.py --url "https://example.com/product/123"
./fetch-page.sh
This will:
./fetch-page.shThe system supports these changedetection.io browser step commands:
action_goto_url - Navigate to URLaction_wait_for_seconds - Wait for specified timeaction_execute_js - Execute JavaScript codeaction_wait_for_text - Wait for text to appearaction_scroll_down - Scroll page downaction_get_html_content - Capture full HTML contentaction_click_element - Click DOM elementaction_enter_text_in_field - Fill form fieldsWhen action_get_html_content executes:
GET /health - Server health checkGET /api/commands - View command queue statusGET /stream/browser-commands - SSE command streamPOST /api/command-result - Receive command resultsPOST /api/reset-commands - Reset all commands to pendingpython3 sse-server.py --help
Options:
-u, --url URL Target URL for automation (required)
--host HOST Server host (default: 0.0.0.0)
--port PORT Server port (default: 8000)
Chrome Extension ←→ SSE Server ←→ BeautifulSoup Analysis
↓ ↓ ↓
Browser Commands → Command Results → HTML Processing
The fetch-page.sh script configures Chrome with:
The extension automatically discovers the SSE server by trying:
http://localhost:8000http://127.0.0.1:8000http://redis-browsersteps:8000 (Docker hostname)chrome://extensions/ → Details → Inspect views: service workerbrowser-steps.jsexecuteAction() switch statementinitialize_commands()# Test manual commands
curl http://localhost:8000/api/commands
# Reset command queue
curl -X POST http://localhost:8000/api/reset-commands
chrome://extensions/ for errorspip install beautifulsoup4This Chrome extension approach offers significant advantages over traditional automation tools like Puppeteer or Selenium:
This makes it particularly effective against sophisticated bot detection systems deployed by Akamai Ghost, Cloudflare Bot Management, and similar services that specifically target CDP-based automation tools and headless browser detection.
This project is for educational and development purposes.
8 commits
JavaScript
59.8%
Python
32.0%
HTML
5.3%
Shell
2.8%
A Chrome extension that executes changedetection.io-style browser automation commands via Server-Sent Events (SSE). The extension can automatically capture HTML content and process it with BeautifulSoup for analysis.
The browser step command list is retrieved from sse-server.py when the Chrome browser first starts by a little hack that triggers the connection on the first network IO. (Or else the chrome extension would need clicking)
First time usage-
sse-server.py runningfetch-page.sh and enable the extension and 'debug mode' in extension config, close it.fetch-page.sh to test (it will re-use the same chrome profile)(see below for more details),
chrome-extension/
├── manifest.json # Chrome extension manifest
├── background.js # Extension background service worker
├── browser-steps.js # Browser automation step implementations
├── popup.html # Extension popup UI
├── popup.js # Popup UI logic
├── sse-server.py # Python SSE server
├── requirements.txt # Python dependencies
├── fetch-page.sh # Chrome launcher script
└── README.md # This file
pip install -r requirements.txt
chrome://extensions/# Start server with target URL
python3 sse-server.py -u "https://www.costco.com/.product.100736527.html"
# Or use any other URL
python3 sse-server.py --url "https://example.com/product/123"
./fetch-page.sh
This will:
./fetch-page.shThe system supports these changedetection.io browser step commands:
action_goto_url - Navigate to URLaction_wait_for_seconds - Wait for specified timeaction_execute_js - Execute JavaScript codeaction_wait_for_text - Wait for text to appearaction_scroll_down - Scroll page downaction_get_html_content - Capture full HTML contentaction_click_element - Click DOM elementaction_enter_text_in_field - Fill form fieldsWhen action_get_html_content executes:
GET /health - Server health checkGET /api/commands - View command queue statusGET /stream/browser-commands - SSE command streamPOST /api/command-result - Receive command resultsPOST /api/reset-commands - Reset all commands to pendingpython3 sse-server.py --help
Options:
-u, --url URL Target URL for automation (required)
--host HOST Server host (default: 0.0.0.0)
--port PORT Server port (default: 8000)
Chrome Extension ←→ SSE Server ←→ BeautifulSoup Analysis
↓ ↓ ↓
Browser Commands → Command Results → HTML Processing
The fetch-page.sh script configures Chrome with:
The extension automatically discovers the SSE server by trying:
http://localhost:8000http://127.0.0.1:8000http://redis-browsersteps:8000 (Docker hostname)chrome://extensions/ → Details → Inspect views: service workerbrowser-steps.jsexecuteAction() switch statementinitialize_commands()# Test manual commands
curl http://localhost:8000/api/commands
# Reset command queue
curl -X POST http://localhost:8000/api/reset-commands
chrome://extensions/ for errorspip install beautifulsoup4This Chrome extension approach offers significant advantages over traditional automation tools like Puppeteer or Selenium:
This makes it particularly effective against sophisticated bot detection systems deployed by Akamai Ghost, Cloudflare Bot Management, and similar services that specifically target CDP-based automation tools and headless browser detection.
This project is for educational and development purposes.
8 commits
JavaScript
59.8%
Python
32.0%
HTML
5.3%
Shell
2.8%