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. 显式等待
python 复制代码
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. 隐式等待
python 复制代码
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异常,当异常发生时,你可以记录错误信息,或者执行其他的恢复操作。
python 复制代码
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. 等待元素变为可交互
python 复制代码
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. 避免元素被其他元素所遮挡
python 复制代码
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].style.zIndex = 9999;", element)
6. 使用JavaScript进行交互硬刚
python 复制代码
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].click();", element)
7. 使用JavaScript或者jQuery来改变元素的可见性
python 复制代码
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].style.display = 'block';", element)
8. 滚动到元素
python 复制代码
element = driver.find_element_by_id("myElement")
driver.execute_script("arguments[0].scrollIntoView();", element)
9. 模拟复杂的用户交互
python 复制代码
from selenium.webdriver import ActionChains

element = driver.find_element_by_id("myElement")
actions = ActionChains(driver)
actions.move_to_element(element).perform()
10. 终极无敌暴力方法:多次修bug迭代
只要功夫够深,铁柱磨成针。
功夫不负有心人。
相关推荐
Python×CATIA工业智造17 分钟前
Frida RPC高级应用:动态模拟执行Android so文件实战指南
开发语言·python·pycharm
onceco1 小时前
领域LLM九讲——第5讲 为什么选择OpenManus而不是QwenAgent(附LLM免费api邀请码)
人工智能·python·深度学习·语言模型·自然语言处理·自动化
我叫小白菜1 小时前
【Java_EE】单例模式、阻塞队列、线程池、定时器
java·开发语言
狐凄1 小时前
Python实例题:基于 Python 的简单聊天机器人
开发语言·python
weixin_446122462 小时前
JAVA内存区域划分
java·开发语言·redis
悦悦子a啊2 小时前
Python之--基本知识
开发语言·前端·python
QuantumStack3 小时前
【C++ 真题】P1104 生日
开发语言·c++·算法
whoarethenext4 小时前
使用 C++/OpenCV 和 MFCC 构建双重认证智能门禁系统
开发语言·c++·opencv·mfcc
笑稀了的野生俊4 小时前
在服务器中下载 HuggingFace 模型:终极指南
linux·服务器·python·bash·gpu算力
Naiva4 小时前
【小技巧】Python+PyCharm IDE 配置解释器出错,环境配置不完整或不兼容。(小智AI、MCP、聚合数据、实时新闻查询、NBA赛事查询)
ide·python·pycharm