出现Element is not clickable at point错误或者NoSuchElement的缘由🈶️如下几点:python
一、这个元素被点击的时候不在页面可见范围内 web
解决方法:使用显式等待方法等待元素可见或者可点击。浏览器
二、这个元素还未加载出来ui
解决方法:使用sleep休眠几秒等待加载spa
三、这个可被点击的元素被其余元素/蒙层所覆盖了 code
解决方法:对于下拉菜单鼠标悬停等使用ActionChains类解决blog
四、在Iframe里ci
解决方法:将焦点转至iframe里element
注:页面等待方法(python)iframe
a.显式等待:使WebDriver等待某个条件成立时继续执行,不然超过期长就跑出超时异常
使用方法:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
frameElement=WebDriverWait(driver,30,0.5).until(EC.presence_of_element_located((By.XPATH,xpath)))
其中WebDriverWait(driver浏览器驱动,timeout最长超过期间,检测间隔时间S),在设置时间内,每隔一段时间检测一下当前页面是否存在,超过期间抛异常
WebDriverWait()通常由utill()或until_not()配合使用
until(method,message='')调用该方法提供的驱动程序做为一个参数,知道返回值为True
EC----expected_conditions类提供了一系列的场景判断方法,本例子使用了presence_of_element_located()方法判断元素是否存在
b.隐式等待
WebDriver.implicitly_wait(10)经过必定的时长来等待页面上某元素加载完成。
注:单位S,10s并非一个固定的等待时间他不影响脚本的执行速度,不针对页面上的某一元素进行等待,若是元素能够定位,继续执行,不能够定位会已轮询的方式不断判断元素是否被定位到,没法定位抛出异常。
c.sleep休眠
但愿脚本执行到某个位置作固定时间的休眠
from time import sleep sleep(10)