查找元素的函数如下所示:
def find_element(val, elem=None, by=By.CLASS_NAME) -> WebElement:
if elem is None:
elem = driver
element = WebDriverWait(elem, 10).until(EC.element_to_be_clickable((by, val)))
return element
每次需要查找元素时,我都会调用这个函数。
weekday = find_element("weekday")
weekday.click()
有一个特定的有问题的按钮,有时工作,有时不工作。它给出了一个错误:selenium.common.exceptions。元素点击拦截异常:消息:元素点击拦截:元素…在点(840,12)处不可点击。其他元素将收到点击:
问题是有时它工作(当我使用更大的显示器时)有时它不工作,当我运行调试器时,等待几秒钟10/20,然后它变得可点击。我不明白为什么当element_to_be_clickable说它是可点击的时,它不能点击。
ps driver.execute_script(“参数[0].click();”,平日)什么都不做,也试过了。
通过将元素滚动到页面中间来解决它。
desired_y = (weekday.size['height'] / 2) + weekday.location['y']
current_y = (driver.execute_script('return window.innerHeight') / 2) + driver.execute_script(
'return window.pageYOffset')
scroll_y_by = desired_y - current_y
driver.execute_script("window.scrollBy(0, arguments[0]);", scroll_y_by)
来解决
selenium.common.exceptions.ElementNotInteractableException: Message: element
您应该像下面这样调试代码:
> < li>
确保使用以下命令全屏启动浏览器
driver.maximize_window()
使用< code>ActionChains:
ActionChains(driver).move_to_element(WebDriverWait(driver, 20).until(EC.visibility_of_element_located(By.CLASS_NAME, ".weekday"))).click().perform()
进口:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.action_chains import ActionChains
我最近将selenium升级到最新版本(2.53),将firefox升级到最新版(45.0.1)。 我在相同的网站上运行相同的代码,但我突然有很多这样的例外: Web 驱动程序异常: 消息: 元素在点 (312, 8.816665649414062) 不可单击。其他元素将收到单击: 例如: 有什么我应该注意的新东西吗?我之前的python selenium版本相当旧,而且我在Firefox 38上
问题内容: 这个问题是由于总的中间在试图忠实于什么实际用户一样。所以我在想这种方法: 首先,而不是查找元素,然后单击: 编写单击以下内容的通用函数: 然后,当发生此异常时,请尝试以其他方式单击。 您认为这种方法可行吗? 问题答案: 请仔细阅读此堆栈溢出答案以更好地理解。 更新 我们也可以尝试 也请尝试如下 尝试使用Y坐标单击 尝试使用X坐标单击 希望这对您有帮助
我有一个使用Selenium WebDriver版本3.6和Chrome驱动程序的自动化项目。软件运行良好,直到它开始显示错误 未知错误:元素在点(25,-9)处不可单击(会话信息:Chrome=61.0.3163.100)(驱动程序信息:ChromeDriver=2.31.488763(092DE99F48A300323ECF8C2A4E2E7CAB51DE5BA8),平台=Windows NT
有一种方法可以使用element\u to\u be\u clickable方法,方法是将webelement作为参数传递,而不是像Java中那样传递定位器(by)。 问题是,我想等待的元素是通过xpath在另一个webelement中以相对方式查找来获得的,直到它可单击为止。 我的Java代码 在python中使用selenium有没有同样的方法?
问题内容: 我有以下问题。我在Firefox和Chrome上运行测试。在Firefox上测试可以正常运行,但在Chrome SauceLabs上会显示一条消息: 我在两种测试中均通过唯一的CSS选择器选择元素,方式相同: 有什么主意在这里吗? 问题答案: 我假设您具有所需的正确元素,即XPath是正确的。这里有几种方法: 尝试单击代替。 试试看 代替 尝试执行将在您要单击的元素事件时执行的。 我一