selenium 报错 Element is not clickable at point 常见解决方法

【点击报错】:

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

Element is not clickable at point
【原因及解决方法】:

一般常见的如下四种方法:
原因一:对象未加载
说 明:没加载出来就等待元素加载出来,再往下执行往往就会报错
解决方案:

#方法一:可以使用python库time 进行等待
import time 
time.sleep(3)

#方法二:使用selenium自带WebDriverWait (推荐)
from selenium.webdriver.support.ui import WebDriverWait
WebDriverWait(driver, 10).until(EC.title_contains("元素"))

原因二:当前页面存在frame/iframe,查找的对象不在当前frame/iframe下面
说 明: 如果元素不在当前frame/iframe里,在窗口里找是找不到frame/iframe下的元素的,所以更是无法相关操作的
解决方案: 需要要切换到i元素所在的frame/iframe里去找元素

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

原因三:不在视窗里
说明: 不在当前可视化的页面中
解决方案: 需要需要拉滚动条 或设置浏览器默认打开大小

方法一:很多网站的列表页不是立马返回所有内容,是根据视图来显示的。所以,我们就需要拖动滚动条来把要获取的内容显示到视窗里才可以获取到。
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()

方法二:将浏览器分辨率进行设置,设置全屏去跑(特别是--headless模式下)
# 正常模式下:
b = webdriver.Chrome()
b.set_window_size(1920, 1080)
b.maximize_window()

# 后台模式下:
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument('--window-size=1920,1080');
chrome_options.add_argument('--start-maximized');
chrome_options.add_argument('--headless')
b = webdriver.Chrome(chrome_options=chrome_options)

原因四:要点击的元素被覆盖
解决方案:可以使用事件链来解决
例如下拉菜单,通过hover,让子菜单显示,就可以点击了。

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()

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

部分参考参考 CSDN
原文链接:https://blog.csdn.net/lilongsy/article/details/76152620

你可能感兴趣的:(selenium 报错 Element is not clickable at point 常见解决方法)