首页 > 解决方案 > ElementClickInterceptedException:消息:元素点击被拦截:

问题描述

我有这样的代码

for i in range(int(total_fill)):
    WebDriverWait(driver, 20).until(EC.presence_of_element_located((By.XPATH,f'//*[@id="maincontentid"]/app-dashboard/app-itr-status/div[4]/div[{i+1}]/mat-card/div/div/div[4]/div[2]')))
    b = driver.find_element_by_xpath(f'//*[@id="maincontentid"]/app-dashboard/app-itr-status/div[4]/div[{i+1}]/mat-card/div/div/div[4]/div[2]').click()

但我收到了这个错误:

ElementClickInterceptedException: Message: element click intercepted: Element <div _ngcontent-oyq-c49="" class="btnBox">...</div> is not clickable at point (753, 26). Other element would receive the click: <span _ngcontent-oyq-c4="" class="sessionTimeHeading">...</span>
  (Session info: chrome=91.0.4472.114)

标签: pythonselenium

解决方案


首先尝试使用element_to_be_clickable而不是presence_of_element_located.
如果这仍然没有帮助,您可以使用JavaClick代替driver.click().
所以如果这仍然不能正常工作

for i in range(int(total_fill)):
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,f'//*[@id="maincontentid"]/app-dashboard/app-itr-status/div[4]/div[{i+1}]/mat-card/div/div/div[4]/div[2]')))
    b = driver.find_element_by_xpath(f'//*[@id="maincontentid"]/app-dashboard/app-itr-status/div[4]/div[{i+1}]/mat-card/div/div/div[4]/div[2]').click()

尝试这个:

for i in range(int(total_fill)):
    el = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH,f'//*[@id="maincontentid"]/app-dashboard/app-itr-status/div[4]/div[{i+1}]/mat-card/div/div/div[4]/div[2]')))
    driver.execute_script("arguments[0].click();", el)

我必须注意:强烈建议不要使用如此复杂的定位器,//*[@id="maincontentid"]/app-dashboard/app-itr-status/div[4]/div[{i+1}]/mat-card/div/div/div[4]/div[2]因为它们非常不可靠。
另外,请在此处阅读有关ElementClickInterceptedException


推荐阅读