【问题标题】:How to make a while-loop run as long as an element is present on page using selenium in python?只要在 python 中使用 selenium 页面上存在元素,如何使 while 循环运行?
【发布时间】:2017-08-20 13:41:58
【问题描述】:

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

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-loop 中做的第一件事是检查一个唯一元素,该元素仅存在于包含我感兴趣的数据的页面上。因此,当我到达没有这个的页面时信息,我会得到NoSuchElementException 然后休息。

如何在不创建while True 的情况下实现上述目标?

【问题讨论】:

    标签: python html selenium selenium-webdriver


    【解决方案1】:

    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(),它用于较短的等待时间。

    【讨论】:

    • 也可以是while driver.find_elements_by_class_name("uniqueclass"):。还取决于do_something() 内部发生的情况,稍微sleep 可能会很好。
    • 感谢您的回答 - 我会试一试!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2020-04-29
    • 2020-07-01
    • 2019-08-22
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多