• selenium报错Element is not clickable at point及四种解决方法


    点击报错

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

    Element is not clickable at point
    1
    原因及解决方法

    无外乎四种原因

    未加载

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

    import time
    time.sleep(3)
    1
    2
    不过最好还是使用selenium自带WebDriverWait

    from selenium.webdriver.support.ui import WebDriverWait

    WebDriverWait(driver, 10).until(EC.title_contains("元素"))
    1
    2
    3
    WebDriverWait的具体用法请点击参考文档。

    在iframe里

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

    driver.switch_to_frame("frameName") # 根据框架名来切换
    driver.switch_to_frame("frameName.0.child") # 子框架
    driver.switch_to_default_content() # 返回
    1
    2
    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()
    1
    2
    3
    关于下拉滚动条的内容可以参考博客

    要点击的元素被覆盖

    可以使用事件链来解决
    例如下拉菜单,通过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()
    1
    2
    3
    4
    关于事件链详情,请点击文档。

    参考

    思路来源于网友半山,在此感谢半山。
    ————————————————
    版权声明:本文为CSDN博主「lilongsy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/lilongsy/article/details/76152620

  • 相关阅读:
    突然连不上VSS等服务器的原因之一
    “复制到剪贴板”的解决方案
    设置SQLServer2008开启远程连接(转)
    对List(IList)集合作求和,最大(小)值操作
    .net实现简单语音朗读(TTS)功能
    17点成就你的好代码
    2011年上半年五大臭名昭著的数据库泄密事件
    Spring Mobile 1.1.0.M2 发布
    Rainbows! 4.4.3 发布,修复 EventMachine 问题
    情绪不是反应,而是决定
  • 原文地址:https://www.cnblogs.com/wenjing2019/p/12034685.html
Copyright © 2020-2023  润新知