Python Selenium常见的报错以及措施

Python Selenium的常见报错主要包括以下几种:

1. NoSuchElementException: 当Selenium无法在DOM中找到元素时,会抛出此异常。这通常是因为元素不存在或者页面还未完全加载。

    解决方法:

        显式等待

        隐式等待

        越快越慢,越慢越快,快就是慢,就是快,所以越慢就越快。

        或者把程序放到不同的网络的不同的电脑上,多个网络多个电脑分担工作、

2. TimeoutException: 当等待某个条件成立(例如,等待元素加载)的时间超过预设的最大值时,会抛出此异常。

    解决方法:

        始终无法成功等待元素出现就会出现这个问题

        很可能是服务器觉得你这个客户端给他带来的负担太大了,它受不了了。那么

        休息一段时间,它好你也好

3. WebDriverException: 当与WebDriver通信出现问题时,会抛出此异常。这可能是因为WebDriver服务未启动,或者网络连接中断。

    解决方法:

        总的来说是小问题

        检查浏览器版本,检查浏览器驱动版本,检查网络情况,检查网络代理情况

        更新Selenium库?

4. StaleElementReferenceException: 当引用的元素已经不在DOM中时,会抛出此异常。这通常是因为页面已经刷新或者元素已经被删除。

    解决方法:

        有可能原来的URL已经失效或者过期了,于是会自动跳转到一个新的网页,新的网页往往在脚本程序中既定的跪着之外。

        检查当前URL

        检查当前标签标题

5. NoSuchFrameException: 当试图切换到不存在的frame时,会抛出此异常。

    解决方法:

        尝试从根节点重新依次定位到该frame标签

6. NoSuchWindowException: 当试图切换到不存在的窗口时,会抛出此异常。

    解决方法:

        重新获取有效的标签页,顺便清理一下多余的标签页

7. ElementNotVisibleException: 当试图与不可见的元素交互时,会抛出此异常。

    解决方法:

        等待该元素可见

        使用JavaScript或者jQuery来改变元素的可见性

        滚动到元素

        使用ActionChains模拟用户交互,例如鼠标悬停、拖放等

8. ElementNotInteractableException: 当试图与不可交互的元素(例如,被禁用的输入框)交互时,会抛出此异常。

    解决方法:

        等待元素变为可交互

        检查元素是否被其他元素遮挡

        使用JavaScript进行交互(非要硬刚的话)

解决的代码示例:

1. 显式等待
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ECdriver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:element = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.ID, "myDynamicElement")))
finally:driver.quit()
2. 隐式等待
from selenium import webdriverdriver = webdriver.Firefox()
driver.implicitly_wait(10) # seconds
driver.get("http://somedomain/url_that_delays_loading")
myDynamicElement = driver.find_element_by_id("myDynamicElement")
3. 使用try/except语句来捕获NoSuchElementException异常,当异常发生时,你可以记录错误信息,或者执行其他的恢复操作。
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementExceptiondriver = webdriver.Firefox()
driver.get("http://somedomain/url_that_delays_loading")
try:myDynamicElement = driver.find_element_by_id("myDynamicElement")
except NoSuchElementException:print("Element not found")
4. 等待元素变为可交互
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import Byelement = WebDriverWait(driver, 10).until(EC.element_to_be_clickable((By.ID, 'myElement'))
)
5. 避免元素被其他元素所遮挡
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].style.zIndex = 9999;", element)
6. 使用JavaScript进行交互硬刚
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].click();", element)
7. 使用JavaScript或者jQuery来改变元素的可见性
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].style.display = 'block';", element)
8. 滚动到元素
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].scrollIntoView();", element)
9. 模拟复杂的用户交互
from selenium.webdriver import ActionChainselement = driver.find_element_by_id("myElement")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
10. 终极无敌暴力方法:多次修bug迭代
    只要功夫够深,铁柱磨成针。
    功夫不负有心人。

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

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

相关文章

C#,冒泡排序算法(Bubble Sort)的源代码与数据可视化

排序算法是编程的基础。 常见的四种排序算法是:简单选择排序、冒泡排序、插入排序和快速排序。其中的快速排序的优势明显,一般使用递归方式实现,但遇到数据量大的情况则无法适用。实际工程中一般使用“非递归”方式实现。本文搜集发布四种算法…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第二天-Linux开发板外设练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

并发(6)

目录 31.JUC框架包含几个部分? 32.Lock框架和Tools包含哪些核心的类? 33.JUC原子类有哪些核心的类? 34.JUC线程池有哪些核心的类? 35.线程安全的实现方法有哪些? 31.JUC框架包含几个部分? 主要包含&am…

SpringCloud-高级篇(十三)

前面的主从集群可以应对Redis高并发读的问题,Redis主从之间可以做同步,为了提高主从同步时的性能,单节点Redis的内存不要设置太高,如果内存占用过多,做RDB的持久化,或者做全量同步的时候,导致大…

LDD学习笔记 -- Linux错误码

LDD学习笔记 -- Linux错误码 EACCES(Permission Denied) 13EEXIST(File Exits) 17EINVAL(Invalid Argument) 22ENOENT(No Such File or Directory)ENOMEM(Out of Memory)EIO(Input/Output Error) 5ENOSPC(No space Left on Device)ENOTTY(Not a Typewrite)EPIPE(Broken Pipe)EI…

使用邮箱发送验证码前端完成登录

前言 在前一篇使用C#发送邮箱验证码已经完成使用.net core web api写了完成往登录邮箱发送验证码的接口。现在就用前端调用接口模拟登录功能。 接口 public class ApiResp{public bool Success { get; set; }public int Code { get; set; }public int count { get; set; }pu…

元数据管理平台对比预研 Atlas VS Datahub VS Openmetadata

大家好,我是独孤风。元数据管理平台层出不穷,但目前主流的还是Atlas、Datahub、Openmetadata三家,那么我们该如何选择呢? 本文就带大家对比一下,这三个平台优势劣势。要了解元数据管理平台,先要从架构说起。 正文共&am…

【北邮国院大四上】Business Technology Strategy 企业技术战略

北邮国院电商大四在读,本笔记仅为PPT内容的整理与翻译,并不代表本课程的考纲及重点,仅为本人复习时方便阅读与思考之作。 写在前面 大家好,欢迎来到大学期间的最后一门课程,本门课程是中方课,所以很庆幸的…

【Apollo】阿波罗使用占位符 #{} 的异常分析

文章目录 1. 前言2. 复现3. 分析3.1 Value 注解3.2 根因 4. 后记5. 参考资料 1. 前言 出于线上 hotfix 报文请求模板的考虑,新增一个阿波罗配置,取值形如: 发布配置一段时间后,刚好需要重启服务,最终造成服务宕机&a…

在Ubuntu22.04上安装WordPress

WordPress是当今最简单、最强大的博客和网站建设工具。据统计全球大约有40% 以上网站是使用WordPress,这是个巨大的数字也侧面证明了WordPress的强大和普遍性。因此,如果你正在寻找一款高效、实用、可靠的CMS工具来构建网站,那么WordPress无疑…

关于HAL库外部中断的开关流程

通过HAL库配置好外部中断后,会生成如下代码: static void MX_GPIO_Init(void) {GPIO_InitTypeDef GPIO_InitStruct {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 *//* GPIO Ports Clock Enable */__HAL_RCC_GPIOD_CLK_…

self-attention(上)李宏毅

B站视频链接 word embedding https//www.youtube.com/watch?vX7PH3NuYW0Q self-attention处理整个sequence,FC专注处理某一个位置的资讯,self-attention和FC可以交替使用。 transformer架构 self-attention的简单理解 a1-a4可能是input也可以作为中…

如何把电脑中的项目快速传进Github中?

一、打开GitHub网站:https:github.com 登录自己的个人账号 1.新建一个项目 2.用鼠标直接拖拽电脑中的项目文件夹与文件到新创建的项目中点击保存即可。

JS手写apply,call,bind函数

本篇文章咱们来手写简易版的apply,call,bind函数。 实现思路 首先咱们需要思考下这三个函数放到哪里比较合适,因为这三个函数是被函数对象调用的,并且每个函数都可以调用,所以不难想到有一个位置非常合适,…

springboot第47集:【思维导图】面向对象,关键字,标识符,变量,数组的使用...

关键字:class,public,static,void等,特点是全部关键字都是小写字母。 image.png image.png 凡是自己起的名字可以叫标识符 image.png image.png image.png image.png 整数类型的使用 image.png image.png image.png 浮点类型 image.png image.png 字符类…

用队列实现栈oj题——225

. 个人主页:晓风飞 专栏:LeetCode刷题|数据结构|Linux 路漫漫其修远兮,吾将上下而求索 文章目录 题目要求:实现 MyStack 类:注意:示例:解释:提示: 解题核心数据结构的定义…

ASP.NET Core基础之图片文件(二)-WebApi图片文件上传到文件夹

阅读本文你的收获: 了解WebApi项目保存上传图片的三种方式学习在WebApi项目中如何上传图片到指定文件夹中 在ASP.NET Core基础之图片文件(一)-WebApi访问静态图片文章中,学习了如何获取WebApi中的静态图片,本文继续分享如何上传图片。 那么…

Python点云处理(二十一)基于Gradient Boosting的点云分类算法

目录 0 简述1 Gradient Boosting2 点云特征向量构建3 用Gradient Boosting进行分类4 代码实现5 结果展示0 简述 点云分类是计算机视觉领域中的一个重要任务,其主要目标是将三维空间中的点云数据划分为不同的类别。点云是由大量的三维点组成的数据集,通常由激光雷达或结构光等…

uniapp 微信小程序跳转外部链接

一、背景: 开发小程序时,跳转到内部路径通常会使用:uni.navigateTo,uni.redirectTo,uni.reLaunch,uni.switchTab等方法,可以跳转到pages.json中已经注册的页面 uni.navigateTo(OBJECT) | uni-…

编程天赋和努力哪个更重要?

编程天赋和努力在编程中都非常重要,但它们的侧重点不同。 编程天赋通常指的是与生俱来的、在逻辑思维、抽象思维、创造力等方面的能力,这些能力可以帮助程序员更快地理解问题、更高效地设计和实现解决方案。天赋的确可以帮助程序员更容易地入门和更快地掌…