DuckDuckGo URL Collector
A Tampermonkey/Greasemonkey script for comprehensive search result management
🔍 Description
This userscript automatically collects all unique URLs from DuckDuckGo search results, including those hidden behind pagination ("More Results"). Features include:
- 🌈 RGB-animated collection button
- ⏱️ Real-time duration timer
- 🔄 Automatic pagination handling
- 📋 Duplicate prevention
- 📥 Automatic TXT file download
- 📊 Progress logging/notifications
- 🖥️ Visual feedback during processing
📥 Installation
Install a userscript manager:
Install the script
Confirm installation in your userscript manager
🚀 Usage Guide
- Navigate to DuckDuckGo
- Perform any search
- Look for the animated 🦆 button (top-right corner)
- Click the button to start collection
- Wait while the script:
- Automatically loads all results (clicking "More Results")
- Collects unique URLs
- Shows progress in console
- Automatic download (
urls.txt
) when complete
⚙️ Technical Features
- Smart Detection: Uses DOM queries (
[data-testid="result"]
)
- Efficient Storage:
Set
object for O(1) lookups
- Visual Feedback:
- Button animation during processing
- Desktop notifications
- Console logging (F12 to view)
- File Handling: Creates Blob URLs for instant download
- Performance: 2-second delays between page loads
⚠️ Limitations
- Only works on DuckDuckGo search results pages
- Dependent on DuckDuckGo's DOM structure
- Requires JavaScript enabled
- May not work with some privacy extensions
- Limited to ~1000 results (DuckDuckGo's pagination limit)
🔧 Troubleshooting
Problem: Button not appearing
✅ Solutions:
- Refresh page after script installation
- Check userscript manager is enabled
- Verify script matches
*://duckduckgo.com/*
Problem: Partial results collection
✅ Solutions:
- Wait for script completion (notification appears)
- Check console for errors (F12 > Console)
- Disable conflicting extensions
Problem: File not downloading
✅ Solutions:
- Check browser download permissions
- Disable popup blockers
- Allow multiple downloads in browser settings
🛠️ Customization (Advanced)
Modify these values in the script:
// Change delay between page loads (ms)
await new Promise(resolve => setTimeout(resolve, 2000));
// Modify filename
a.download = 'urls.txt';
// Change button styling
Object.assign(btn.style, { ... });
📜 License
MIT Licensed - Feel free to modify/redistribute but please:
- Maintain author credit
- Link to original source
- Share improvements with community