解决Selenium报错“Element is not clickable at point...”的四种方法

 

点击报错

使用Selenium时,触发点击事件,常常报以下异常:css

Element is not clickable at point

缘由及解决方法

无外乎四种缘由html

1. 未加载

没加载出来就等待元素加载出来,再往下执行。 
能够使用python库timepython

import time 
time.sleep(3)

不过最好仍是使用selenium自带WebDriverWaitweb

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver, 10).until(EC.title_contains("元素"))

WebDriverWait的具体用法请点击参考文档api

2. 在iframe里

若是元素在iframe里,在窗口里找是找不到元素的,更是没法点击。因此,要切换到iframe里去找元素。框架

driver.switch_to_frame("frameName")  # 根据框架名来切换
driver.switch_to_frame("frameName.0.child")  # 子框架
driver.switch_to_default_content()  # 返回

其余相关切换,请点击参考文档网站

3. 不在视窗里,须要拉滚动条

不少网站的列表页不是立马返回全部内容,是根据视图来显示的。因此,咱们就须要拖动滚动条来把要获取的内容显示到视窗里才能够获取到。ui

page = driver.find_element_by_partial_link_text(u'下一页')
driver.execute_script("arguments[0].scrollIntoView(false);", page)
WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.PARTIAL_LINK_TEXT, u'下一页'))).click()

关于下拉滚动条的内容能够参考博客spa

4. 要点击的元素被覆盖

能够使用事件链来解决 
例以下拉菜单,经过hover,让子菜单显示,就能够点击了。.net

menu = driver.find_element_by_css_selector(".nav")
hidden_submenu = driver.find_element_by_css_selector(".nav #submenu1")

ActionChains(driver).move_to_element(menu).click(hidden_submenu).perform()

关于事件链详情,请点击文档。 

相关文章
相关标签/搜索