Selenium技术疑问:find_elements方法为何不抛出异常?
为什么find_elements()找不到元素时不抛出异常?
核心原因是两个方法的设计语义不同:
- find_element():语义是「获取单个匹配元素」(默认取第一个),如果没有任何匹配项,就会抛出
NoSuchElementException——因为它的预期是必须存在至少一个目标元素,找不到属于异常情况。 - find_elements():语义是「获取所有匹配元素的集合」,如果没有匹配项,就会返回一个空列表,而不是抛出异常——空列表本身就是合法的结果,代表“当前页面没有符合条件的元素”,这属于正常业务场景,而非异常。
你的代码逻辑问题及修正
你当前的try-except块其实完全不起作用,因为find_elements()永远不会触发异常,所以except里的代码根本不会执行。正确的写法应该是判断返回的列表是否为空:
# 先尝试第一个选择器 restaurantsReviews = self.driver.find_elements(By.XPATH, '//div[@class="review-container"]') # 如果是空列表(没找到),再用第二个选择器 if not restaurantsReviews: restaurantsReviews = self.driver.find_elements(By.XPATH, '//div[@class="YibKl MC R2 Gi z Z BB pBbQr"]')
内容的提问来源于stack exchange,提问作者bartoro
相关产品推荐
相关产品推荐

