zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    学习JavaScript 的必备 (一),让您对js的 function, javascript内置对象,this概念及之间的关系不再迷惑。(希望能置为推荐篇,为更多的js初学者关注)
    你人脉网中应该有的10种人
    十句话,不黄不色,但很经典~~~~~~~~~~
    js网站
    …↓爆》笑
    JavaScript使用技巧精萃
    JDK源码分析之Set类详解——适配器模式的应用
    好的程序员做不出好的软件设计
    JDK源码中ClassLoader的浅析
    提高编程技巧的十大方法
  • 原文地址:https://www.cnblogs.com/wenjing2019/p/12034685.html
Copyright © 2011-2022 走看看