【问题标题】:ElementClickInterceptedException Solutions in Selenium and PythonSelenium 和 Python 中的 ElementClickInterceptedException 解决方案
【发布时间】:2021-06-21 18:10:07
【问题描述】:

我打算在网站上自动按下一个按钮,但与此同时,一种叫做活动 (kampanyalar) 的东西正在阻止它。我该如何解决这个问题?我希望其他元素不要获得点击属性

错误:

ElementClickInterceptedException: element click intercepted: Element <div class="styled__CampaignCardDescriptionTitle-sc-1n4y3hk-2 hulWUi" color="">...</div> is not clickable at point (531, 35). Other element would receive the click: <a class="styled__HeaderMenuItem-sc-126ws66-35 gEoUee" href="/kampanyalar" id="DPE_TR_HOME_BUTTON_HEADERITEM0">...</a>

【问题讨论】:

  • 针对不同的原因有不同的解决方案。有时前面有一个对话框需要关闭。我认为在您的情况下,DOM 似乎仍在更新(尽管可能是滚动问题)。如果它是由 DOM 仍在更新(或显示加载进度元素)引起的,请检查此处发布的答案:stackoverflow.com/questions/66820416/…

标签: python-3.x selenium selenium-webdriver selenium-chromedriver


【解决方案1】:

ElementClickInterceptedException 可能由多种原因引起。
最强大的是用 JavaScript 点击它而不是 webdriver 点击。像下面这样:

element = driver.find_element_by_xpath("xpath")
driver.execute_script("arguments[0].click();", element)

但是最好看看是什么导致了这个异常。
如果元素不在可见屏幕或某些页脚元素元素与其重叠,最好将该元素滚动到视图中:

from selenium.webdriver.common.action_chains import ActionChains

element = driver.find_element_by_xpath("xpath")
driver.execute_script("arguments[0].scrollIntoView();", element)

在某些其他情况下,这会发生,因为您在页面仍在加载元素时尝试单击元素,因此当前在该元素上找到了其他元素。在这种情况下,最好只是等到该元素变为可点击。像这样:

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

WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "xpath"))).click()

因此,最好根据您所面临的具体情况使用更多类似用户的操作,并且只有在没有其他方法可以使用 JavaScript 点击的情况下

【讨论】:

  • 不太确定等待可点击是否会阻止所有情况。元素可以点击,但是还是会抛出点击拦截异常..
  • 我没有提到它适用于所有情况。仅当在渲染过程中存在一些重叠元素时。
【解决方案2】:

ElementClickInterceptedException 表示您要与之交互的元素在 Selenium 视口中不可用。

三件事:

1.全屏启动浏览器:

driver.maximize_window()

2. 使用 execute_script 滚动到该元素:

driver.execute_script("arguments[0].scrollIntoView();", driver.find_element_by_css_selector(.your_css_selector))

3.动作链的使用:

ActionChains(driver).move_to_element(driver.find_element_by_id('some id where you want to go')).perform()

进口您需要:

from selenium.webdriver.common.action_chains import ActionChains

【讨论】:

  • 你能用上面的代码在一个网站上展示一个例子吗?
  • 天哪!您需要尝试一下哪一种符合您的要求。或分享网址,如果你有任何
猜你喜欢
  • 1970-01-01
  • 2020-07-11
  • 2021-11-03
  • 2021-06-15
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多