Python Selenium常见的报错问题以及措施

 更新时间:2024年05月16日 16:50:06   作者:CCSBRIDGE  
这篇文章主要介绍了Python Selenium常见的报错问题以及措施,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

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 EC
 
driver = 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 webdriver
 
driver = 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 NoSuchElementException
 
driver = 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 By
 
element = 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 ActionChains
 
element = driver.find_element_by_id("myElement")
actions = ActionChains(driver)
actions.move_to_element(element).perform()

10. 终极无敌暴力方法:多次修bug迭代     

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • 用python对oracle进行简单性能测试

    用python对oracle进行简单性能测试

    这篇文章主要介绍了用python对oracle进行简单性能测试的示例,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2020-12-12
  • 详解python校验SQL脚本命名规则

    详解python校验SQL脚本命名规则

    这篇文章主要介绍了python校验SQL脚本命名规则,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • python中的单引号双引号区别知识点总结

    python中的单引号双引号区别知识点总结

    在本篇文章中小编给大家整理了关于python中的单引号双引号有什么区别的相关知识点以及实例代码,需要的朋友们参考下。
    2019-06-06
  • Python中处理JSON文件的超详细指南

    Python中处理JSON文件的超详细指南

    这篇文章主要给大家介绍了关于Python中处理JSON文件的超详细指南,json模块是python内置的库,不需要额外安装就可以导入运行,json模块的主要功能是将序列化数据从文件里读取出来或者存入文件,需要的朋友可以参考下
    2024-05-05
  • python 实现矩阵按对角线打印

    python 实现矩阵按对角线打印

    今天小编就为大家分享一篇python 实现矩阵按对角线打印,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python matplotlib调整坐标轴位置、标签位置和标签方向以及X轴刻度标签位置

    Python matplotlib调整坐标轴位置、标签位置和标签方向以及X轴刻度标签位置

    我们在用matplotlib绘制图的时候总是有各种需求,下面这篇文章主要给大家介绍了关于Python matplotlib调整坐标轴位置、标签位置和标签方向以及X轴刻度标签位置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-04-04
  • 详解Python模块化编程与装饰器

    详解Python模块化编程与装饰器

    这篇文章主要介绍了Python模块化编程与装饰器的相关资料,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下
    2021-01-01
  • python3实现高效的端口扫描

    python3实现高效的端口扫描

    这篇文章主要为大家详细介绍了python3实现高效的端口扫描,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-08-08
  • 基于Python实现GeoServer矢量文件批量发布

    基于Python实现GeoServer矢量文件批量发布

    由于矢量图层文件较多,手动发布费时费力,python支持的关于geoserver包又由于年久失修,无法在较新的geoserver版本中正常使用。本文为大家准备了Python自动化发布矢量文件的代码,需要的可以参考一下
    2022-07-07
  • 利用Python第三方库实现预测NBA比赛结果

    利用Python第三方库实现预测NBA比赛结果

    今天给大家带来的是关于Python的相关知识,文章围绕着利用Python实现预测NBA比赛结果展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06

最新评论