【Python】selenium 点击某个按钮 click() 出现的报错问题--ElementClickInterceptedException(全!)

写在前面:
我们在使用selenium 点击某个元素时或者获取find_element的某个网页元素时,总会遇到一些问题。本人经验是,最直接的方法是用try_except 报错,直接绕过问题,可以直接看第一条。如果有兴趣具体解决,可以看后面的几个方法,赶时间的伙伴可以只看第一条就好了!

我们在Python中使用Selenium库进行自动化测试时,如果遇到点击某个按钮时click()方法出现问题,Selenium会抛出一个异常。如果这个异常是

selenium.common.exceptions.ElementClickInterceptedException

这表明,我们点击的操作被另一个元素拦截了,导致我们点不到我们想要的东西,而是点到别的东西。

解决这个问题,以下有几种方法:

1、try-except捕获异常报错:

个人觉得使用try-except语句来捕获这些异常是最直接和快捷的,将报出的问题捕获到,并给出下一步更具体的提示,去恢复操作,以下是代码的部分:

#调用selenium的
from selenium.common.exceptions import NoSuchElementException, ElementClickInterceptedExceptiontry:element = driver.find_element(By.XPATH,'//*[@id="app"]/main/section[1]/div/div[3]/span')element.click()
except ElementClickInterceptedException as e:print("点击被拦截,请检查是否有其他元素覆盖在按钮上。")#这里可以写遇到这个问题的解决方法,可以报错给自己看,也可以直接忽略到下一步等等。
except NoSuchElementException as e:print("找不到元素,请检查元素的定位方式是否正确。")
except Exception as e:print(f"发生了一个错误:{e}")

通过捕获特定的异常类型并给出相应的错误信息,在写代码的时候,可以更快速地定位和解决问题。

当这些异常发生时,我们也可以通过编写自定义的错误来捕捉处理这些异常,如果想了解其他的异常Exception类,可以参考:

2、检查覆盖元素,关闭弹窗:

检查并解决覆盖元素: 检查页面上的覆盖元素,并尝试解决它们。

检查我们点击的元素是不是上面有一层覆盖的模态框或弹出窗口,如果有,尝试关闭或隐藏它们,点击关闭的键,例如如图:图片来自网络(图片来自网络)

代码:

# 假设弹出窗口有一个关闭按钮
close_button = driver.find_element(By.ID, "closeButton")
close_button.click()

如果不是窗口,那么看看是否有关闭下拉菜单、隐藏覆盖层等。具体问题具体分析。如果是有隐藏的覆盖层,需要找到下一层的接口网址。

3、滚动到元素的位置:

如果元素不在可视区域内,在页面底下,要滚动到该元素可以使它变得可点击。

driver.execute_script("arguments[0].scrollIntoView();", element)

4、使用显式等待,直到元素可以被点击

可能网站显示的速度太慢,需要等到页面加载才会让元素出来,这时候就可以用显性等待的方法。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECtry:element = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, "myElement")))element.click()
except TimeoutException:print("元素在指定时间内不可点击")

5、使用ActionChains模拟鼠标移动到元素上再点击

这种情况适用于对方网站的服务器已经检测到了爬虫操作,普通的click不能通过检验,需要点击元素才能让页面加载(当然这种情况其实少见),解决方法:

from selenium.webdriver.common.action_chains import ActionChainsaction = ActionChains(driver)
action.move_to_element(element).click(element).perform()

6、刷新页面:

如果元素应该可见但当前不可见,可能是因为页面状态不正确。尝试刷新页面。

driver.refresh()

7、使用JavaScript:

通过执行 JavaScript 来点击元素,这可以绕过一些覆盖元素。

driver.execute_script("arguments[0].click();", element)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24421.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Algorithm][动态规划][01背包问题][模板 背包][分割等和子集]详细讲解 +何为背包问题?

目录 0.何为背包问题?1.模板 背包1.题目链接2.算法原理详解3.代码实现 2.分割等和子集1.题目链接2.算法原理详解3.代码实现 0.何为背包问题? 背包问题:有限制条件下的"组合问题" 你有一个背包,地上有一堆物品&#xff…

ASP .NET Core 中的 Autofac 依赖注入

介绍 Autofac 是适用于 .NET 应用程序(包括 ASP.NET Core)的流行依赖注入 (DI) 容器。Autofac 等 DI 容器通过提供注册和解析依赖关系的方法来帮助管理应用程序不同组件之间的依赖关系。 为什么需要Autofac,它能实现什么? 控制…

交错数组知识点

基本概念 交错数组是数组的数组,每个维度的数量可以不同。 注意:二维数组的每行的列数相同,交错数组每行的列数可能不同。 数组的申明 //变量类型[][] 交错数组名; int[][] arr1;//变量类型[][] 交错数组名 new 变量类型[行数][]; int[][…

四十三、openlayers官网示例Freehand Drawing解析——在地图上自由绘制图形

想要在地图上绘制自由图形,只需要在new Draw的时候多加一个配置项就行。 function addInteraction() {const value typeSelect.value;if (value ! "None") {draw new Draw({source: source,type: typeSelect.value,freehand: true, //是否自由绘制});ma…

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题

在当前页面拿到抽屉弹窗页面中从后端返回的值 #Vue3 #两个.vue页面之间传值问题 *解决方法一: 将抽屉弹窗里从后端返回得到的值缓存在浏览器中,在当前页面中从浏览器中获取该值。 (原理其实就是借助第三个盒子来传递一下值,太小学…

HIK录像机GB28181对接相机不在线问题随笔

一、问题现象 【设备信息】型号:DS-8664N-I16-V3 V4.63.000 build 230412 【问题现象】HIK录像机使用GB28181对接异常相机无法正常上线,对接HIK相机可以正常上线。 【现场拓扑】现场拓扑如下 NVR侧使用固定公网IP地址。IPC侧使用家用宽带的方式&…

第R3周:天气预测

🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 | 接辅导、项目定制 🚀 文章来源:K同学的学习圈子 目录 我的环境 语言环境:python3.8.18编译器:jupyter not…

pikachu靶场(File Inclusion(文件包含)通关教程)

1.File Inclusion(local)本地文件包含 1.1打开网站,发现有个下拉框,随便选择一个,然后点击提交 1.2发现图中有个参数变了,其他的也会变,猜测这里可能有其他隐藏的文件 1.3直接进行抓包 ,右键发送到爆破模…

LeetCode | 1470.重新排列数组

class Solution(object):def shuffle(self, nums, n):""":type nums: List[int]:type n: int:rtype: List[int]"""result []for i in range(n):result.append(nums[i])result.append(nums[i n])return result这题很容易想到的就是遍历整个数组…

拼多多第37期:拼多多单品裂变起爆2.0(17节课)

课程下载:拼多多第37期:拼多多单品裂变起爆2.0(17节课)-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载:关注我。 课程内容: 01.《拼多多单品裂变起爆2.0》非标品类成功操作案例.mp4 02.《拼多…

【Python爬虫单点登录实战】PyExecJS破解慧职教:过河源技术学院单点登录统一身份认证

目录 前言大致分析PyExecJS 使用案例pip 安装:Demo:输出:案例1.访问目标网站的登录页面并查看源码2.将js放到和py脚本同一级目录下3. 编写Python脚本来调用js破解单点登录实战提取密钥参数清洗数据登陆测试单点登录获取ticket获取jsessionid获取token成功我的专栏前言 博主提供…

小程序中 使用 UDPSocke通讯的流程

小程序使用UDPSocket与设备通讯的步骤可以归纳如下: 创建UDPSocket实例: 使用wx.createUDPSocket()方法创建一个UDP Socket实例。 绑定端口: 调用UDPSocket.bind(number port)方法,绑定一个系统随机分配的可用端口,或…

java 子网掩码和IP计算起始IP和终止IP工具类

java 子网掩码和IP计算起始IP和终止IP工具类 1.根据掩码位数获取掩码 2.根据ip地址和掩码获取起始IP 3.根据ip地址和掩码获取终止IP 4.ip转换Long 5.实际可用ip数量 public class NetAddressUtils {/*** 根据掩码位数获取掩码*/public static String getNetMask(String ma…

写一个经典的java引用传递的例子

private fun getRaidType(): List<SelectItem<String>> {var list raidTyperaidType.forEach{Log.i("DHG","raidType is $it")}list.forEach{Log.i("DHG","list raidType is $it")}viewModel.diskInfo?.value?.forEach…

SOLIDWORKS参数化设计插件 慧德敏学

SOLIDWORKS软件是法国达索公司的产品&#xff0c;最初是满足欧美一些工程师产品设计需要而开发的&#xff0c;并没有考虑中国的企业实际情况。我们为满足国内客户的需要&#xff0c;对SOLIDWORKS进行了二次开发&#xff0c;借助SolidKits.AutoWorks参数化工具&#xff0c;通过一…

.Net Core 8.0 IIS部署遇到奇怪的部分接口报404的问题解决

本地运行没问题&#xff0c;部署到IIS后&#xff0c;部分接口报404&#xff0c;其它接口都正常。 经和群里讨论&#xff0c;大概意思是接口返回数据比较大的时候&#xff0c;就会出现这个问题。 查看事件查看器&#xff0c;发现应该是数据过大时使用了临时文件夹&#xff0c;…

2024高考作文引发的人工智能争议

又是一年高考季&#xff0c;多少学子的修行成果也在这这一刻迎来了终极检验&#xff0c;多少学子的梦也在这一刻拉开了揭晓序幕&#xff0c;多少学习的命运也在这一刻迎来了人生中的第一次转变。每年的高考不仅是学子们的人生大事&#xff0c;也是多少父母的热切期望&#xff0…

VSCode函数无法跳转问题,小插件安装说明

1、问题&#xff1a; VSCode中程序想查看某函数内部&#xff0c;无法跳转。 2、解决办法&#xff1a; 安装C/C GNU Global插件即可解决 3、安装操作步骤&#xff1a; 1&#xff09;方式1&#xff1a; 可在VSCode中左侧栏中&#xff08;图中1&#xff09;&#xff0c;搜索…

Ubuntu22.04之解决:无法关机和重启问题(二百四十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LeetCode ---400周赛

题目列表 3168. 候诊室中的最少椅子数 3169. 无需开会的工作日 3170. 删除星号以后字典序最小的字符串 3171. 找到按位与最接近 K 的子数组 一、候诊室中的最少椅子数 简单的模拟题&#xff0c;我们可以这样来模拟&#xff1a;当有顾客来时&#xff0c;我们加一把椅子&…