Problem
Selenium WebDriver instances consume 400–600 MB RAM each, limiting concurrent requests to roughly 15–25 per server
Solution
Used headless Firefox with reduced rendering, async HTTP + BeautifulSoup where sites allow it (supporting far higher concurrency), and Selenium Grid with multiple Firefox nodes