Selenium常见异常解析及解决方案示范
异常简介
Selenium在使用过程中,会出现各种异常情况,这些异常情况的出现可能会导致程序无法继续执行或者是结果不符合预期。因此,在使用Selenium时,理解各种异常的含义,及其解决方案,是非常重要的。
常见异常及其解决方案
NoSuchElementException
当程序找不到指定的元素时,将会抛出NoSuchElementException异常。这可能是由于页面结构发生变化,定位元素的方式不正确等原因所致。解决方案如下:
- 确认定位元素的方式是否正确。可以使用浏览器的开发者工具来确认元素的定位方式是否正确,以及定位到的元素是否唯一。另外,可以使用Selenium的By类提供的多种元素定位方式来尝试定位元素。
- 如果元素是动态生成的,则可以使用显示等待方式来等待元素加载完毕。
示例1:
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test():
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
try:
element = driver.find_element_by_id("not-exist") # 通过id定位不存在的元素
except NoSuchElementException as e:
print("Element not found.")
finally:
driver.quit()
TimeoutException
当程序等待某个元素出现或者某个事件完成超时时,将会抛出TimeoutException异常。这可能是由于网速较慢或者页面结构发生变化等原因所致。解决方案如下:
- 调整等待时间或者等待条件。可以使用显示等待或者隐式等待来等待元素加载完成或者某个事件完成,在等待时间或者等待条件上进行适当的调整即可。
- 确认页面结构是否发生变化,如果发生变化,需要修改程序代码。
示例2:
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test():
driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
try:
element = WebDriverWait(driver, 10).until(
EC.presence_of_element_located((By.ID, "not-exist"))
) # 等待10秒钟,直到元素出现
except TimeoutException as e:
print("Timeout occurred.")
finally:
driver.quit()