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

 

点击报错

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

Element is not clickable at point

原因及解决方法

无外乎四种原因

1. 未加载

没加载出来就等待元素加载出来,再往下执行。 
可以使用python库time

import time 
time.sleep(3)

不过最好还是使用selenium自带WebDriverWait

from selenium.webdriver.support.ui import WebDriverWait

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

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

2. 在iframe里

如果元素在iframe里,在窗口里找是找不到元素的,更是无法点击。所以,要切换到iframe里去找元素。

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

其他相关切换,请点击参考文档

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

很多网站的列表页不是立马返回所有内容,是根据视图来显示的。所以,我们就需要拖动滚动条来把要获取的内容显示到视窗里才可以获取到。

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

关于下拉滚动条的内容可以参考博客

4. 要点击的元素被覆盖

可以使用事件链来解决 
例如下拉菜单,通过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()

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

转载于:https://my.oschina.net/u/942203/blog/1552747

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值