如何处理python中的ElementClickInterceptedException错误

问题描述 投票:0回答:1

我正在运行下面的代码,使用 selenium 在 python 中抓取网站:

    def click_and_wait_for_additional_info(elem):
        # Click on the store element to navigate to its individual page
        elem.click()
        time.sleep(2)
        
        try:
            features = driver.find_element(By.XPATH,  '//*[@id="QA0Szd"]/div/div/div[1]/div[3]/div/div[1]/div/div/div[2]/div[6]/button/div[2]/div/div').text
        except:
            features = "None"
            
       
        return features
   

每次我在大量观察上运行此代码时,都会给出错误 ElementClickInterceptedException

有什么建议可以处理吗?

我尝试了以下: a)driver.隐式等待 b) 下面的代码:

def click_and_wait_for_additional_info(elem):
        try:
        # Wait for the element to be clickable
            clickable_elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="Nv2PK tH5CWc THOPZb "]')))
            
            # Click on the store element to navigate to its individual page
            clickable_elem.click()
            time.sleep(2)
            
            try:
                features = driver.find_element(By.XPATH,  '//*[@id="QA0Szd"]/div/div/div[1]/div[3]/div/div[1]/div/div/div[2]/div[6]/button/div[2]/div/div').text
            except:
                features = "None"
                
           
            return category

        except ElementClickInterceptedException:
            print("Element click intercepted. Retrying...")
            # Retry clicking on the element
            try:
                clickable_elem = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.XPATH, '//div[@class="Nv2PK tH5CWc THOPZb "]')))
                clickable_elem.click()
                time.sleep(2)
                # Your code to extract additional info goes here...
            except Exception as e:
                print("Exception occurred:", e)
                return None
    
        except Exception as e:
            print("Exception occurred:", e)
            return None

但是在机器人中,当错误得到解决时,数据是: a) 移位 b) 不断重复

python selenium-webdriver web-scraping
1个回答
0
投票

很有可能是定位器问题。

当尝试单击网页上的某个元素被另一个元素阻止时,通常会引发

ElementClickInterceptedException 异常。当另一个元素重叠或完全/部分位于您尝试单击的 DOM 元素前面时,可能会发生这种情况。

我建议您检查一下您的定位器。不要使用绝对路径,它们确实不可靠且不稳定。请改用相对 xpath。请参阅

本文了解差异。

另外,不要过多依赖@class属性。特别是如果有很多“单词”。开发人员经常可以轻松更改类值顺序以及值本身。

另一点是价值观。像“QA0Szd”或类“Nv2PK”这样的 ID 通常由前端框架自动创建。通常,它们是动态的,因此最好不要使用此类属性,除非您信任页面源。

基本上,一个好的定位器+显式等待(EC.element_to_be_clickable)应该可以满足您的情况。

但如果它没有帮助,请尝试
单击操作

© www.soinside.com 2019 - 2024. All rights reserved.