Autonomous web crawler for capturing user journeys
Project description
UX Journey Scraper
Autonomous web crawler for capturing user journeys.
A powerful tool for UX designers, developers, and QA teams to autonomously capture complete user flows through websites.
๐ฏ What It Does
Core Features (v0.3.0)
- ๐ค Autonomous Crawling: Intelligently navigates websites without manual intervention
- ๐ฏ Smart Element Detection: Finds ALL clickables (buttons, links, onclick handlers, ARIA roles)
- ๐ธ Journey Capture: Records complete user flows with screenshots at each step
- ๐ Auth Support: Handles login flows and session management
- ๐ Form Filling: Automatically fills checkout forms (test data only)
- ๐ต๏ธ Stealth Mode: Anti-bot detection with human-like behavior simulation
- ๐ SPA Support: Works with modern single-page applications
- ๐ก๏ธ Privacy-Aware: Automatically blurs PII in screenshots
๐ Installation
PyPI Installation (Recommended)
# Install latest version (v0.3.0 - Autonomous Crawling)
pip install ux-journey-scraper
Installation from Source
# Clone the repository
git clone https://github.com/resabh/ux-journey-scraper.git
cd ux-journey-scraper
# Install in development mode
pip install -e .
# OR install with full UX guidelines support
pip install -e ".[full]"
Note: The [full] option includes ecommerce-ux-guidelines package for detailed UX analysis. The base installation works fully for autonomous crawling and journey capture without it.
Post-Installation
After installation, install Playwright browsers:
playwright install chromium
๐ Quick Start
Autonomous Crawl (v0.3.0)
# Create a configuration file (see scrape-config.example.yaml)
ux-journey crawl --config scrape-config.yaml --output-dir journey_output/
# The tool will:
# 1. Check robots.txt (asks for confirmation if needed)
# 2. Autonomously navigate through the site
# 3. Capture screenshots at each step
# 4. Record complete user journey
# 5. Save journey data as JSON + screenshots
Manual Recording (Deprecated)
# Manually record a journey (interactive mode)
ux-journey record \
--start-url https://example.com \
--output my-journey.json
# Note: Use 'crawl' for autonomous navigation
๐ก Use Cases
1. Competitor Analysis
Capture competitor websites to understand user flows and patterns.
ux-journey crawl --config competitor-config.yaml --output-dir competitor_journey/
2. User Flow Documentation
Document user flows with screenshots for design/QA teams.
ux-journey crawl --config mysite-config.yaml --output-dir user_flows/
3. Pre-Launch Testing
Capture staging sites before launch.
ux-journey crawl --config staging-config.yaml --output-dir staging_test/
4. QA Automation
Automated journey capture for regression testing.
ux-journey crawl --config qa-config.yaml --output-dir qa_snapshots/
๐ ๏ธ Features
Journey Recording
- โ Autonomous crawling with priority queue
- โ Multi-step journey capture
- โ Automatic screenshot on each navigation
- โ HTML structure extraction
- โ Form field detection and auto-fill
- โ CTA and button analysis
- โ Navigation element capture
- โ Session management and auth support
Accessibility
- โ WCAG 2.1 Level A/AA validation
- โ Color contrast analysis
- โ Keyboard navigation checks
- โ Screen reader compatibility
- โ ARIA attributes validation
Privacy & Security
- โ PII blur in screenshots (emails, credit cards, names)
- โ robots.txt respect (with user confirmation)
- โ Rate limiting
- โ No data collection or tracking
Reports
- โ Interactive HTML reports
- โ Annotated screenshots with issue markers
- โ JSON export for automation
- โ Journey flow visualization
- โ Issue summaries and scores
๐ CLI Reference
ux-journey record
Record a user journey interactively.
ux-journey record [OPTIONS]
Options:
--start-url TEXT Starting URL (required)
--output TEXT Output file path (default: journey.json)
--viewport TEXT Viewport size (default: 1920x1080)
--blur-pii Blur PII in screenshots (default: true)
--respect-robots Check robots.txt (default: true)
--headless Run in headless mode (default: false)
๐ง Python API
from ux_journey_scraper import JourneyRecorder, Journey
from ux_journey_scraper.config import ScrapeConfig
from ux_journey_scraper.core import AutonomousCrawler
# Option 1: Autonomous crawling with config
config = ScrapeConfig.load("scrape-config.yaml")
crawler = AutonomousCrawler(config=config, output_dir="journey_output/")
journey = await crawler.crawl()
# Option 2: Manual recording (deprecated)
recorder = JourneyRecorder(
start_url="https://example.com",
blur_pii=True,
respect_robots=True
)
journey = await recorder.record()
journey.save("my-journey.json")
# Load existing journey
journey = Journey.load("journey.json")
# Access journey data
for step in journey.steps:
print(f"Step {step.step_number}: {step.title}")
print(f" URL: {step.url}")
print(f" Screenshot: {step.screenshot_path}")
๐ Sample Journey Output
{
"start_url": "https://example.com",
"start_time": "2026-03-19T12:00:00Z",
"end_time": "2026-03-19T12:05:30Z",
"viewport": [1920, 1080],
"steps": [
{
"step_number": 1,
"url": "https://example.com",
"title": "Homepage",
"screenshot_path": "screenshots/step-001.png",
"html_snapshot": "...",
"page_data": {
"forms": [...],
"buttons": [...],
"links": [...]
}
},
...
]
}
๐ How It Works
-
Configuration
- YAML config defines seed URLs, auth, form fill settings
- Priority queue manages navigation strategy
-
Autonomous Crawling
- Launches stealth browser (anti-bot detection)
- Navigates autonomously using priority queue
- Finds ALL clickables (buttons, links, ARIA roles, onclick handlers)
- Handles login flows and session management
- Fills forms with test data (payment safeguards)
-
Capture
- Waits for page readiness (DOM stable, no spinners, lazy-load complete)
- Captures screenshot + HTML at each step
- Blurs PII automatically
- Records all page data (forms, buttons, links)
-
Output
- Saves journey JSON with all steps
- Screenshots folder with PII blurred
- Complete DOM snapshots for analysis
๐ฃ๏ธ Roadmap
v0.3.0 (Current) - Pure Journey Capture
- โ Autonomous crawling with priority queue
- โ Desktop web journey recording
- โ Smart element detection (4 strategies)
- โ Auth support and session management
- โ Form auto-fill with safeguards
- โ PII blur in screenshots
- โ robots.txt handling
- โ Stealth mode (anti-bot detection)
Future Enhancements
- โฌ Mobile viewports (responsive crawling)
- โฌ Multi-page site mapping
- โฌ CAPTCHA handling improvements
- โฌ Visual regression detection
- โฌ Performance metrics capture
- โฌ CI/CD integration
Analysis Features โ Moved to BayMAAR
- UX guidelines analysis is now in the separate BayMAAR Analysis Engine (private)
- This package remains a pure journey capture tool
๐ค Contributing
Contributions welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request
๐ License
MIT License - see LICENSE file for details
๐ Related Projects
- ecommerce-ux-guidelines - 324+ research-backed UX guidelines
๐ Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Made with โค๏ธ for better user experiences
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ux_journey_scraper-0.3.0.tar.gz.
File metadata
- Download URL: ux_journey_scraper-0.3.0.tar.gz
- Upload date:
- Size: 49.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
878030d7a430eef2e3c02ccf6d507cfd29298484af26a451e61a5a93df617f20
|
|
| MD5 |
50406d214a08e8a9e363bded9799166a
|
|
| BLAKE2b-256 |
a9fa70b1cbb531c9a428417194621544b07ff7d1050373a591ae07e8b948d91a
|
File details
Details for the file ux_journey_scraper-0.3.0-py3-none-any.whl.
File metadata
- Download URL: ux_journey_scraper-0.3.0-py3-none-any.whl
- Upload date:
- Size: 49.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4a811a13735dcad5e8c66accadee89cd865c1206991ae292792f56c8e1032a4c
|
|
| MD5 |
91ca25739eea3c1e1e7220b4fe90a9e4
|
|
| BLAKE2b-256 |
737b0cfb057e798e673fe82e83ed1b3e56f6b0ff32fb8e2eb6f2be22d803ff06
|