我正在编写一个简单的脚本来登录特定站点,输入凭据,然后导航至特定部分。我正在使用硒来控制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
但是仍然到我的代码结尾。
答案 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
被称为