Logo New Black

Mastering Playwright: Comprehensive Guide on How to Scroll to the Bottom

Utilizing Playwright for web scraping enables us to navigate pages with infinite scrolling, where content dynamically loads as the user scrolls down. To automate this scrolling, the custom JavaScript function window.scrollTo(x, y) can be effectively employed, allowing the page to scroll to designated coordinates. This technique is especially useful in efficiently accessing and extracting data from websites that don’t readily reveal all their content, making it a crucial strategy for developers and analysts alike. Moreover, for those seeking to optimize their web scraping capabilities further, incorporating a powerful web scraping API can complement Playwright’s functionality, offering enhanced data collection tools and resources tailored to meet a wide range of scraping needs. Whether you’re dealing with pagination, dynamic content, or complex site structures, integrating these technologies can significantly streamline the data extraction process, ensuring you get the most accurate and comprehensive data available.

For instances requiring a scroll to the page’s bottom, a while loop facilitates continuous scrolling until the end is reached. An illustrative example is provided by scraping content from an infinite scrolling page like web-scraping.dev/testimonials:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(headless=False)
    context = browser.new_context()
    page = context.new_page()

    # Initiating scroll to the bottom:
    prev_height = -1
    max_scrolls = 100
    scroll_count = 0
    while scroll_count < max_scrolls:
        page.evaluate("window.scrollTo(0, document.body.scrollHeight)")
        page.wait_for_timeout(1000)  # Adjust timing as necessary
        new_height = page.evaluate("document.body.scrollHeight")
        if new_height == prev_height:
        prev_height = new_height
        scroll_count += 1

    # Collection of all dynamically loaded data:
    results = []
    for element in page.locator('.testimonial').element_handles():
        text = element.query_selector('.text').inner_html()
    print(f"Scraped: {len(results)} results!")

This method demonstrates navigating and scraping from pages with endless scrolling by continuously scrolling to the bottom until no new content loads. Upon reaching the bottom, the script proceeds to parse and collect the available content, showcasing an effective approach to scraping dynamically loaded web pages with Playwright.