【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…

四十三、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成功我的专栏前言 博主提供…

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

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

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

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

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

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

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

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

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

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

LeetCode ---400周赛

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

关于使用南墙waf防护halo网站主页请求404报错的解决方案

文章目录 环境说明问题展示原因探究解决方法 环境说明 在1panel应用商店,部署南墙waf(docker版)halo(2.16.1社区版)注意部署过程中注意uuwaf必须勾选允许外部访问,halo可以不勾选[这里为了证明确实是南墙waf的原因,选择勾选] 问题展示 使…

泛微开发修炼之旅--09Ecology作为所有异构系统的待办中心,实现与kafka对接源码及示例

文章链接:泛微开发修炼之旅--09Ecology作为所有异构系统的待办中心,实现与kafka对接源码及示例

【力扣第 400 场周赛】Leetcode 删除星号以后字典序最小的字符串

文章目录 1. 删除星号以后字典序最小的字符串 1. 删除星号以后字典序最小的字符串 题目链接 🍎 解题思路:遇到 *就删除一个字符,为了满足题意,要删除字典序最小的字符,那么假如有多个字典序最小的字符我们该删除哪个…

自用的2个chatpgt plus拼车渠道!!!

两个渠道,银河和环球,各有优劣 由于平台限制,链接和优惠码,可看原文 原文:https://www.aiutools.fun/archives/4978 先说结论 gpt重度用户:一天50次以上,选 环球 gpt轻度用户:一天用…

无码高清?Stable DIffusion教程 | 如何利用 Stable Diffusion webui 将图片变得更清晰?全方位对比4种放大方法!

大家好,我是大师兄 1、引言 “高分放大”(有时候也叫“超分放大”或“高清修复”)描述了在确保图像清晰度的前提下提升图片分辨率的过程。例如,将一张512 x 512的图片放大四倍,得到的就是2048 x 2048分辨率的图片&am…