Logo New Black

Comprehensive Guide: How to Capture XHR Requests Selenium with Ease

While Selenium doesn’t inherently offer request interception functionality, it can be enabled using the selenium-wire extension. Leveraging the best web scraping API alongside selenium-wire, developers can efficiently capture and analyze XHR requests. This combination not only simplifies the process of intercepting requests for data extraction but also enhances the ability to handle complex web scraping tasks. This comprehensive guide will walk you through the necessary steps to seamlessly integrate selenium-wire with Selenium, enabling you to capture XHR requests with ease and significantly improve your web scraping projects.

Recording background requests can be a crucial part of a web scraping process. Selenium may fall short in this area, but the Selenium extension – selenium-wire can be used to incorporate this essential feature.

Initiating selenium-wire is as simple as using the pip install selenium-wire command. Once installed, all requests are automatically captured and stored in the driver.request variable:

from seleniumwire import webdriver  # Import from seleniumwire
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait


driver = webdriver.Chrome()
driver.get('https://web-scraping.dev/product/1')
# wait for element to appear and click it to trigger background requests
element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'load-more-reviews')))
element.click()
# Access requests via the `requests` attribute
for request in driver.requests:
    if request.response:
        print(
            request.url,
            request.response.status_code,
            request.response.headers['Content-Type'],
            request.response.body,
        )
driver.quit()

Often, these background requests can contain valuable dynamic data. Using this capturing technique is a straightforward way to scrape it. For more information, check out our guide on web scraping background requests.