我有一个更改文字的元素。
<small class="cell progress-name text-center ng-star-inserted">*some changing text*</small>
此元素中的文本消失后,该元素也消失。在元素消失后,我需要找到一种方法来避免while循环。
previous_value = None
while True:
current_value = browser.find_element_by_xpath('//*[@class="cell progress-name text-center ng-star-inserted"]')
if previous_value:
if current_value.text != previous_value:
print(current_value.text)
previous_value = current_value.text
else:
print(current_value)
previous_value = current_value.text
time.sleep(1)
现在我收到no such element: Unable to locate element
错误消息,任何帮助将不胜感激。
我们应该从一个单独的函数中获取一个元素,并通过字符串比较来处理它。对于例如
def getElementText(XPATH):
try:
element = browser.find_element_by_xpath(XPATH)
return element.text
except:
print(XPATH + ' : not found')
return ''
并且我们可以获取元素文本,并查看其是否为空,然后决定退出while循环。
previous_value = None
current_value = getElementText('//*[@class="cell progress-name text-center ng-star-inserted"]')
while current_value != '':
if previous_value:
if current_value != previous_value:
print(current_value)
previous_value = current_value
else:
print(current_value)
previous_value = current_value
time.sleep(1)
current_value = getElementText('//*[@class="cell progress-name text-center ng-star-inserted"]')
您可以使用错误本身来了解元素是否已消失。您只需要处理它并打破循环:
previous_value = None
while True:
try:
current_value = browser.find_element_by_xpath('//*[@class="cell progress-name text-center ng-star-inserted"]')
except NoSuchElementException: # the element wasn't found
break # exit from the loop
if previous_value:
if current_value.text != previous_value:
print(current_value.text)
previous_value = current_value.text
else:
print(current_value)
previous_value = current_value.text
time.sleep(1)
记住要导入异常from selenium.common.exceptions import NoSuchElementException
。
还有另一种处理方法。您可以使用find_elements_by_xpath
(在“元素”中带有“ s”)。如果未找到任何内容,此函数将返回一个空列表,而不是引发错误。
然后您可以检查列表是否为空,如果True
,则中断。
,我给了您,它更干净,并使用了Glossary中的Python原理:previous_value = None while True: current_value = browser.find_elements_by_xpath('//*[@class="cell progress-name text-center ng-star-inserted"]') if not current_value: break # the list is empty if previous_value: if current_value.text != previous_value: print(current_value.text) previous_value = current_value.text else: print(current_value) previous_value = current_value.text time.sleep(1)
我认为最佳选择是第一个
要求宽恕比允许容易。这种通用的Python编码风格假定有效键或属性的存在,并且在假定被证明为假的情况下捕获异常。这种干净快捷的风格的特点是存在许多try和except语句。