热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【错误】Selenium报错:Elementisnotclickableatpoint(x,y)原因及解决办法汇总

【错误】Selenium报错:Elementisnotclickableatpoint(x,y)原因及解决办法汇总1.背景2.问题简述(可


【错误】Selenium报错:Element is not clickable at point(x, y)原因及解决办法汇总

    • 1. 背景
    • 2. 问题简述(可以略过)
    • 2. 最大化浏览器窗口
    • 3. 元素还未加载
    • 4. 元素在iframe里面
    • 5. 不在视图,下拉滚动条
    • 6. 元素被覆盖
    • 7. 参考资料


1. 背景

因为最近在组队学习爬虫,需要用Selenium模拟登录丁香园,其中在尝试运行一位小伙伴的代码的时候,发现自己电脑上(win10台式机)始终会Selenium报错:Element is not clickable at point(x, y)。很是奇怪,小伙伴上面运行没有问题,到自己这里就无法定位元素点击了。经过2h多的摸索和尝试排除,终于找到了解决办法,然后顺带Google一下其他的原因,一起汇总如下:希望以后遇到相似问题的小伙伴能少走弯路。


2. 问题简述(可以略过)

Element is not clickable at point(x, y)这种问题通常出现在使用Chrome驱动程序,因为Chrome浏览器使用点位置。 当元素位置未固定且我们尝试对该特定元素执行某些操作时,将导致错误为Element is not clickable at point (xx, xx). Other element would receive the click。当元素加载到DOM中,但UI上的位置不固定时,就会发生这样的错误。 可能存在一些未完全加载的其他div或图像或广告。 ChromeDriver总是尝试单击元素的中间部分。
有一些方法可以解决这个问题。 但要确保最好和最简单的解决方案是找出解决问题的确切原因。 我们需要弄清楚div / image的哪个部分需要时间来加载。 在单击元素之前,我们需要确保元素存在于DOM中,在UI中可见,最后一个是Position是固定的。 当元素位置固定时,问题就解决了。 如果要检查,请尝试Thread.sleep或在调试模式下验证。
下面列出问题及解决方案。


2. 最大化浏览器窗口

这是最简单也是大多数人的问题所在。博主就是其中之一。当你的电脑的屏幕分辨率大于1024X768时,你你可以尝试最大化浏览器来解决问题。博主的是台式机,分辨率1920X080,小伙伴时笔记本。所以导致了程序在小伙伴电脑上可以运行,博主的却不行。因为窗口太小,导致元素被折叠了,无法执行一些Selenium操作。
解决办法:最大化浏览器窗口driver.maximize_window()

# 最大化窗口
driver.maximize_window()
# 自定义窗口大小
driver.set_window_size(width, height)

3. 元素还未加载

这是非常常见的原因之一,因为CPU跑得远远快于网页加载的速度,所以我们需要让程序等一下浏览器,等元素加载出来,再执行下一步操作。可以通过强制等待隐式等待显示等待三种方法实现。这三种方法的具体区别,大家有兴趣的可以参照博主的另一篇文章爬虫入门学习(六)Selenium学习与实战,里面有对比这三种方法。
这里就简单介绍:
性能上:显示等待>隐式等待>强制等待
解决办法:

# 强制等待
from time import sleep
sleep(t) # 让线程休眠t秒# 隐式等待
from selenium import webdriverff = webdriver.Firefox()
ff.implicitly_wait(10) # seconds
ff.get("http://somedomain/url_that_delays_loading")
myDynamicElement = ff.find_element_by_id("myDynamicElement")# 显示等待,Selenium自带的WebDriverWait
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait # available since 2.4.0
from selenium.webdriver.support import expected_conditions as EC # available since 2.26.0ff = webdriver.Firefox()
ff.get("http://somedomain/url_that_delays_loading")
try:element = WebDriverWait(ff, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:ff.quit()

4. 元素在iframe里面

那就切换到iframe,这里需要用到switch_to_frame方法来切换Frame。

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

更多请参考官方文档


5. 不在视图,下拉滚动条

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

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

更多请参考Selenium下拉滚动条


6. 元素被覆盖

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

更多请参考官方文档


7. 参考资料

对于用Javascript的小伙伴,可以重点看前面三个参考。


  1. Element is not clickable at point SeleniumWebdriverException
  2. Debugging “Element is not clickable at point” error
  3. Chrome - Element is not clickable at point #2766
  4. selenium报错Element is not clickable at point及四种解决方法

后记:
我从本硕药学零基础转行计算机,自学路上,走过很多弯路,也庆幸自己喜欢记笔记,把知识点进行总结,帮助自己成功实现转行。
2020下半年进入职场,深感自己的不足,所以2021年给自己定了个计划,每日学一技,日积月累,厚积薄发。
如果你想和我一起交流学习,欢迎大家关注我的微信公众号每日学一技,扫描下方二维码或者搜索每日学一技关注。
这个公众号主要是分享和记录自己每日的技术学习,不定期整理子类分享,主要涉及 C – > Python – > Java,计算机基础知识,机器学习,职场技能等,简单说就是一句话,成长的见证!
每日学一技


推荐阅读
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
author-avatar
mobiledu2502931987
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有