我正在努力创建一个while
循环,只要网站上存在特定元素,该循环就会运行。我现在所拥有的并不是我为之骄傲的解决方案,但它确实有效。但是,我非常感谢有关如何更改以下内容的一些建议:
def spider():
url = 'https://stackoverflow.com/questions/ask'
driver.get()
while True:
try:
unique_element = driver.find_element_by_class_name("uniqueclass")
do_something()
except NoSuchElementException:
print_data_to_file(entries)
break
do_something_else()
正如您所看到的,我在while
循环中做的第一件事就是检查一个唯一的元素,该元素仅出现在包含我感兴趣的数据的页面上。因此,当我到达页面时没有这些信息,我会得到NoSuchElementException
并打破。
如何在不必制作while True
的情况下实现上述目标?
答案 0 :(得分:4)
driver.find_elements
不会抛出任何错误。如果返回的列表为空,则表示不再有任何元素
def spider():
url = 'https://stackoverflow.com/questions/ask'
driver.get()
while len(driver.find_elements_by_class_name("uniqueclass")) > 0:
do_something()
do_something_else()
您也可以使用显式等待预期条件staleness_of,但是您无法执行do_something()
并且等待时间很短。