Как получить обновленный элемент для цикла? ElementClickInterceptedException или StaleElementReferenceException - PullRequest
0 голосов
/ 22 мая 2019

Я пытаюсь соскрести продукт со страницы, и он выдает мне следующую ошибку. Видимо при первом щелчке () элемент обновляется. По сути, я выполняю итерацию для каждого элемента цвета и размера, но проблема возникает в 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()

Ошибка:

---> 17 color.click ()

ElementClickInterceptedException: Сообщение: перехвачен щелчок элемента: Элемент

...
не активен в данный момент (1078, 381). Другой элемент получит щелчок: ...

Любая помощь приветствуется, спасибо

1 Ответ

0 голосов
/ 22 мая 2019

Измените цикл for, как показано ниже.

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...