元素在点 (x,y.5) 处不可单击,因为另一个元素遮挡了它

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

我尝试单击一个元素,但收到错误:

Element is not clickable at point (x,y.5)

因为另一个元素掩盖了它。

我已经尝试过先移动到该元素,然后单击,并通过最小化窗口然后单击来更改坐标,但这两种方法都失败了。可能重复的问题有我已经尝试过的答案,但没有一个对我有用。

此外,相同的代码可以在不同的电脑上运行。

如何解决?

python selenium selenium-webdriver
9个回答
44
投票

这通常在

element.click()
不起作用时起作用:

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

17
投票

您可能可以做一件事。虽然很粗鲁,但我马上就承认了。

您可以模拟单击所需元素之前的元素,然后模拟按 [TAB] 和 [ENTER] 键。


实际上,我最近就看到了这个错误。我使用的是裸硒提供的常用

.click()
命令 - 比如
driver.find_element_by_xpath(xpath).click()

我发现使用 ActionChains 解决了这个问题。

类似

ActionChains(driver).move_to_element(element).click().perform()
的东西对我有用。

您将需要:

from selenium.webdriver.common.action_chains import ActionChains


1
投票

这是@wrecks的想法,但是如果使用php-webdriver,你可以使用下面的代码:

$element = $driver->findElement(WebDriverBy::cssSelector($id_login));
$driver->executeScript("arguments[0].click();", [$element]);

0
投票

虽然我不在 python 环境中,但我也遇到了同样的问题。 就我而言,这是由您必须单击的那些烦人的“Cookie 声明/警告”引起的。 cookie 声明/警告模糊了我需要单击的元素。所以,我的解决方案是单击“接受”按钮。 我通过观看这个视频发现了这一点:

https://youtu.be/k6g4MMavM1U


0
投票

内部带有微调器的“正在加载”div 覆盖了我要单击的按钮。为了解决这个问题,我只是等到这个“正在加载”div 变得不可见。

这是一个小代码示例:

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver = webdriver.Firefox() driver.get("url/to/visit") # do some clicks or actions # this "wait" can be reused wait = WebDriverWait(self.driver, timeout=15) # invisibility check spinner = driver.find_element( By.CSS_SELECTOR, ".spinnercontainer") wait.until(EC.invisibility_of_element(spinner)) # click button driver.find_element( By.CSS_SELECTOR, ".fa-exchange").click()

这是此
隐形检查的 Selenium 预期条件参考

selenium.webdriver.support.expected_conditions.invisibility_of_element(元素)

检查元素是否不可见或不存在于 DOM 上的期望。 元素是定位器(文本)或 WebElement

在此实现之前,我尝试
等到按钮可单击

,但它不起作用,因为无论按钮被此微调器遮挡,这些条件都满足。

selenium.webdriver.support.expected_conditions.element_to_be_clickable(标记)

检查元素的期望是可见的并且已启用,以便您可以单击它。 元素是定位器(文本)或 WebElement


0
投票

this.driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10); IWebElement btnConsulter = driver.FindElement(By.Id("ctl00_contenuPrincipal_btnConsulter")); this.driver.ExecuteJavaScript("arguments[0].click();", btnConsulter); this.driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);



0
投票
Watir

/ Nerodia(selenium 的高级库)也遇到了同样的错误,这里有一个更优雅的解决方案,无需注入 JavaScript。 我的问题是,当用户第一次加载页面时,Jquery / JavaScript 触发了一个弹出窗口,并且遮盖了菜单中的链接。 所以解决办法是在点击链接之前关闭它。但是因为弹出窗口有淡入,所以我必须等待弹出窗口可见才能关闭它,并且因为弹出窗口有淡出,所以我必须等待链接不再被遮挡之前点击它。

所以代替:

b.link(visible_text: 'Log in').click

我有:

b.button(visible_text: 'Close').wait_until(&:visible?).click b.link(visible_text: 'Log in').wait_while(&:obscured?).click



0
投票
@wrecks

发布的解决方案的 Java 版本,那就是: WebElement element = driver.findElement(By.xpath("//*[@id='element1']")); ((RemoteWebDriver) driver).executeScript("arguments[0].click();", element);



0
投票
time.sleep(2)

    

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