0
votes

I am trying to scrape a product from a page and it throws me the following error. Apparently when doing the first click () the element is updated. Basically what I do is iterate for each color and size item, but the problem arises in color.click ().

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options

browser = webdriver.Chrome()
browser.maximize_window()
browser.get('https://www.shein.com/Ruffle-Detail-Embroidered-Eyelet-Peplum-Top-p-665095-cat-1733.html')
browser.execute_script('document.querySelector("body > div.welcome-privacy.j-welcome-privacy > div > div.c-modal-wrap.welocme-modal > div.c-modal > div > div > div.modal-body > div > div > button").click()')

WebDriverWait(browser, 15).until(EC.visibility_of_element_located((By.CLASS_NAME, "opt-color")))
colorsForLoop = browser.find_elements_by_class_name('opt-color')
sizesForLoop = browser.find_elements_by_class_name('opt-size')
for color in colorsForLoop:
    browser.implicitly_wait(10)
    color.click()
    for size in sizesForLoop:
        size.click()

Error :

---> 17 color.click()

ElementClickInterceptedException: Message: element click intercepted: Element < div class="opt-color" >...< /div > is not clickable at point (1078, 381). Other element would receive the click: ...

Any help is welcome, thanks

1

1 Answers

0
votes

Change the for loop as below.

colors = len(browser.find_elements_by_class_name('opt-color'))

for color in range(colors):
    browser.implicitly_wait(10)
    colorEle = browser.find_element_by_xpath("(//*[@class='opt-color'])[" + str(color+1) +"]")
    colorEle.location_once_scrolled_into_view
    colorEle.click()
    sizes = len(browser.find_elements_by_class_name('opt-size'))
    for size in range(sizes):
        sizeEle = browser.find_element_by_xpath("(//*[@class='opt-size'])[" + str(size+1) +"]")
        sizeEle.location_once_scrolled_into_view
        sizeEle.click()