如何使用 python 中的 selenium 使 while 循环运行,只要页面上存在元素?

vha*_*ham 4 html python selenium selenium-webdriver

我正在努力创建一个while循环,只要网站上存在特定元素,该循环就会运行。我目前拥有的解决方案绝不是我引以为傲的解决方案,但它确实有效。不过,我非常感谢有关如何更改以下内容的一些建议:

def spider():
    url = '/sf/'
    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()
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我在循环中做的第一件事while是检查仅存在于包含我感兴趣的数据的页面上的唯一元素。因此,当我到达没有此信息的页面时,我会得到和NoSuchElementException打破。

我如何才能实现上述目标而无需制作while True

Guy*_*Guy 5

driver.find_elements不会抛出任何错误。如果返回的列表为空,则意味着没有更多元素

def spider():
    url = '/sf/'
    driver.get()

    while len(driver.find_elements_by_class_name("uniqueclass")) > 0:
        do_something()

do_something_else()
Run Code Online (Sandbox Code Playgroud)

您还可以使用带有预期条件staleness_of的显式等待,但是您将无法执行do_something()并且它用于较短的等待期。