首页 > 解决方案 > 元素试图在它出现之前被找到

问题描述

我正在做一个项目,该项目需要获取与类名匹配的多个元素并遍历它们以从每个元素中获取文本并将其打印到屏幕上,问题是代码再次重复并得到最后一个问题,直到我杀死我查看了代码并注意到我尝试使用的元素始终是可点击的,因此我删除了该代码并决定尝试捕获与最后一个文本相关的文本,即 FINISH 我查看并找到了 ID 和构建了下面的代码,但是,问题是它试图在到达最后一个问题之前找到元素,还附加了一个可能的解决方案

    #!/usr/bin/python
    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    Firefox = webdriver.Firefox()
    Firefox.get('ThisIsAExampleWebsite.com')
    # Not the actual website
    # Website isn't included since it's a local business
    Username = 
    Firefox.find_element_by_id('Username_Login').send_keys('Test')
    Password = 
    Firefox.find_element_by_id('Password_Login').send_keys('Test')
    # Not actual username/password
    Article = Firefox.find_element_by_id('Article').click()
    Get_Text = Firefox.find_element_by_id('Article_Text').click()
    while True:
        Article_Texts = Firefox.find_elements_by_id('All_Text')
        for Text in Article_Texts:
            print(Article_Texts.text)
        try:
            Finish = Firefox.find_element_by_id('Finish')
            print('  Done  ' )
            break
        except:
            print('  Not Done ' )
            continue

编辑:如果我在此类名称上使用 find_elements 并使用下面的 len() 代码获取大小,我已经考虑使用文章每个部分的元素将 while 循环替换为 for 循环

Length_Text = len(Firefox.find_elements_by_class_name('NextText'))
for I in range(0, Length_Text):
    Article_Text = Firefox.find_elements_by_id('All_Text')
    for Text in Article_Text:
       print(Text.text)

这背后的想法是,如果我只循环代码以获取下一个文本的数量,那么它不会循环最后一个文本,但是这段代码仍然会循环它,知道为什么吗?

标签: pythonselenium

解决方案


据我了解,您不希望使用 class 的最后一个元素的文本'NextText'。如我错了请纠正我。你可以做减法len() by 1

Length_Text = len(Firefox.find_elements_by_class_name('NextText'))
for I in range(0, Length_Text-1):
    Article_Text = Firefox.find_elements_by_id('All_Text')
    for Text in Article_Text:
       print(Text.text)

推荐阅读