Skip to content Skip to sidebar Skip to footer

How To Find All Elements On The Webpage Through Scrolling Using Seleniumwebdriver And Python

I can't seem to get all elements on a webpage. No matter what I have tried using selenium. I am sure I am missing something. Here's my code. The url has at least 30 elements yet wh

Solution 1:

you have to slowly scroll down the page. It only request price data with ajax when product viewed.

options = Options()
options.add_argument('--start-maximized')
driver = webdriver.Chrome(options=options)

url = 'https://www.adidas.com/us/men-shoes-new_arrivals'
driver.get(url)

scroll_times = len(driver.find_elements_by_class_name('col-s-6')) / 4# (divide by 4 column product per row)
scrolled = 0
scroll_size = 400while scrolled < scroll_times:
    driver.execute_script('window.scrollTo(0, arguments[0]);', scroll_size)
    scrolled +=1
    scroll_size += 400
    time.sleep(1)

shoe_prices = driver.find_elements_by_class_name('gl-price')

for price in shoe_prices:
    print(price.text)

print(len(shoe_prices))

Solution 2:

So there seems to be some difference in the results as using your code trial:

  • You find 30 items with requests and 6 items with Selenium
  • Where as I found 40 items with requests and 4 items with Selenium

This items on this website are dynamically generated through Lazy Loading so you have to scrollDown and wait for the new elements to render within the HTML DOM and you can use the following solution:

  • Code Block:

    import requests
    import webbrowser
    from bs4 import BeautifulSoup as bs
    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By
    from selenium.common.exceptions import NoSuchElementException, TimeoutException
    
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36'}
    url = 'https://www.adidas.com/us/men-shoes-new_arrivals'
    res = requests.get(url, headers = headers)
    page_soup = bs(res.text, "html.parser")
    containers = page_soup.findAll("div", {"class": "gl-product-card-container show-variation-carousel"})
    print(len(containers))
    shoe_colors = []
    for container in containers:
        if container.find("div", {'class': 'gl-product-card__reviews-number'}) isnotNone:
        shoe_model = container.div.div.img["title"]
        review = container.find('div', {'class':'gl-product-card__reviews-number'})
        review = int(review.text)
    options = Options()
    options.add_argument('start-maximized')
    options.add_argument('disable-infobars')
    options.add_argument('--disable-extensions')
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get(url)
    myLength = len(WebDriverWait(driver, 20).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "span.gl-price"))))
    whileTrue:
        driver.execute_script("window.scrollBy(0,400)", "")
        try:
            WebDriverWait(driver, 20).until(lambda driver: len(driver.find_elements_by_css_selector("span.gl-price")) > myLength)
            titles = driver.find_elements_by_css_selector("span.gl-price")
            myLength = len(titles)
        except TimeoutException:
            breakprint(myLength)
    for title in titles:
        print(title.text)
    driver.quit()
    
  • Console Output:

    47
    $100$100$100$100$100$100$180$180$180$180$130$180$180$130$180$130$200$180$180$130$60$100$30$65$120$100$85$180$150$130$100$100$80$100$120$180$200$130$130$100$120$120$100$180$90$140$100

Post a Comment for "How To Find All Elements On The Webpage Through Scrolling Using Seleniumwebdriver And Python"