首页 > 解决方案 > 循环直到页面上的消息更改硒python

问题描述

我有一个从页面中提取值的刮板。在这个站点中,我有一个按钮可以传递给下一个值并更新页面上的数据。当没有更多值要提取时,页面会在页脚中显示一条消息。我需要重复这个循环,直到出现消息。

该消息有两个可能的值,当值更改为特定消息时,我需要转到另一个页面并发送其他值。我的问题是我不知道如何重复循环,直到值发生变化,因为每次我重复循环时页面都会更新,或者换句话说,消息是动态的。当值更改时,我不会提取值并发送我在 Excel 工作表中拥有的新值。

我尝试这样做,但它不起作用:

#with open("Output.txt", "a") as text_file:

for x in range (2,9):
    inputrut = driver.find_element_by_xpath("""//*[@id="BodyText"]/input[1]""")
    inputrut.clear()
    rutvalue=  ws.cell(row=x, column=1).value
    dvvalue= ws.cell(row=x, column=2).value
    inputrut.send_keys(str(rutvalue)+"-"+str(dvvalue))
    driver.find_element_by_xpath("""//*[@id="MenuTable"]/tbody/tr[2]/td/input""").click()
    mensaje = driver.find_element_by_xpath("""//*[@id="FootText"]""").get_attribute("innerHTML")
    print (mensaje)

    if mensaje !=" ?don't have values":
        print(x)
        mensajeproximo = driver.find_element_by_xpath("""//*[@id="FootText"]""").get_attribute("innerHTML")
        
        mensajeproximo3 = " ?dont have more values"  
      
        while mensajeproximo != mensajeproximo3:
            
            print("next "+mensajeproximo)
            extractvalues(driver)
            driver.find_element_by_xpath("""//*[@id="MenuTable"]/tbody/tr[3]/td/input""").click()
                               
        else: 
            print("new value")
            driver.find_element_by_xpath("""//*[@id="MenuTable"]/tbody/tr[3]/td/input""").click()
    
    else: 
        text_file = open("Output.txt", "a")
        text_file.write(str(rutvalue)+"-"+str(dvvalue)+"NO REGISTRA"+'\n')
        print("no values")
        driver.find_element_by_xpath("""//*[@id="MenuTable"]/tbody/tr[3]/td/input""").click() 

循环的问题在哪里?

问候

标签: pythonloopsselenium-chromedriver

解决方案


这是循环的代码:

   while True:
                if driver.find_element_by_xpath("""//*[@id="FootText"]""").get_attribute("innerHTML") == mensajeproximo2:
                    print("next")
                    extractvalues(driver)
                    driver.find_element_by_xpath("""//*[@id="MenuTable"]/tbody/tr[3]/td/input""").click()
                    time.sleep(1)
                                    
                else: 
                    message =driver.find_element_by_xpath("""//*[@id="FootText"]""").get_attribute("innerHTML")
                    print("new value"+message)
                    driver.find_element_by_xpath("""//*[@id="MenuTable"]/tbody/tr[3]/td/input""").click()
                    time.sleep(1)
                    break

推荐阅读