直接上代码:
# 捕获定位元素的异常
except Exception as e:
self._error_cont += 1
if self._error_cont >= self._error_max:
raise e
# 从黑名单中持续取出各类弹窗
# 这里存在一个问题,如果弹窗都没有在黑名单中,那么下面的的find方法会继续查找
for black in self._black_list:
# 判断弹窗是否在页面中
elements = self._driver.find_elements(*black)
# 如果在,那么长度会大于0
if len(elements) > 0:
# 对第一个找到的页面进行点击
elements[0].click()
# 然后再次定位需要的元素
!!# return self.find(by, locator)
raise e
这段代码中,按我个人的理解,最后的return语句,是在条件满足定位到任意元素的时候发生的,那么如果我在整个循环中都定位不到元素,这一项就不会发生,会直接跳出循环,执行raise终止程序,这里的死循环并不会发生。
这里是不是可以改成下面的代码:
for black in self._black_list:
# 判断弹窗是否在页面中
elements = self._driver.find_elements(*black)
# 如果在,那么长度会大于0
if len(elements) > 0:
# 对第一个找到的页面进行点击
for element in elements:
elements[0].click()
# 然后再次定位需要的元素
return self.find(by, locator)
想请老师解答一下这样修改是否可行,或是纠正一下我的错误