Python代码不断突破while循环

时间:2018-09-04 10:27:47

标签: python

我正在编写一个简单的脚本来登录特定站点,输入凭据,然后导航至特定部分。我正在使用硒来控制Firefox,并且第一部分工作正常。

下一部分是我遇到问题的地方。

基本上,登录并进入Section1之后,我创建了一个while循环,要求我提供输入。输入将在不同部分之间导航。我在这里有5个选择。第五个退出站点并退出该程序。

我正在Mac(终端)上运行它。我想要的行为是我仅选择选项之一(1、2、3、4、5)在不同部分之间导航和/或注销并关闭程序。

以下是打开Firefox,登录并转到第1节之后的代码。

reply = ''
while reply == '':
    print('''
    What would you like to do next?
    Enter the number to do the following:
    1 - Go to Section 1
    2 - Go to Section 2
    3 - Go to Section 3
    4 - Go to Section 4
    5 - Logout and Quit
    ''')

    reply = input()

    if reply == 1: #Load Section 1
        section1 = browser.find_element_by_id('id goes here')
        section1.click()


    elif reply == 2:  #Load Section 2
        print('Opening negotations...')
        section2 = browser.find_element_by_id('id goes here')
        section2()  

    elif reply == 3: #Load Section 3
        section3 = browser.find_element_by_id('id goes here')
        section3.click()

    elif reply == 4: #Load Section 4
        section4 = browser.find_element_by_id('id goes here')
        section4.click()

    elif reply == 5: #Logout and close browser
        break 

    else:
        print('Please choose from one of the options.')

print('Logging out...')
logout = browser.find_element_by_css_selector('css selector goes here')
logout.click()
time.sleep(3)
browser.quit()

所有单独的find_element_by_css_selector或by_id_selector均单独工作。我只是无法使其在循环内工作。

发生的事情是,每当我被要求输入(答复)时,无论我的回答是什么,它都会注销,即执行while循环中的第5个选项。

我似乎不明白是什么原因造成的。

我尝试过的一些东西

在每个if / elif之后添加一个continue,如下所示:

if reply == 1: #Load Section 1
        section1 = browser.find_element_by_id('id goes here')
        section1.click()
        continue

但是仍然到我的代码结尾。

3 个答案:

答案 0 :(得分:2)

您需要将回复设置为 else 中的空字符串。

else:
    print('Please choose from one of the options.')
    reply = ''

当您选择一个不可用的选项时,您正在设置reply,然后循环将检查reply是否等于空字符串('')。通过将其设置回空字符串,循环可以继续。

这里的另一个答案也很好地说明了如何正确投射输入。输入以字符串形式返回,并且该字符串已分配给回复。之后,您要立即检查回复的字符串是否等于整数。这是一个很好的解决方法,但不是循环问题的根源,可以将 reply 变量重置为空字符串。

答案 1 :(得分:1)

input()返回一个字符串,而不是整数。因此,如果您正在检查reply == 1,则它将总是失败,因为您的实际值为'1'。用

替换行
reply = int(input())

答案 2 :(得分:0)

使用:

while True:

这要等到:

break

被称为