当代码出现故障时,我希望代码重置并再次运行。 我想我有能力做到这一点,但是当代码在失败时重置时,它不会清除 x 的值。 因此,代码将继续保持中断状态,从而否定返回开始的原因。
import time
from selenium.webdriver.common.action_chains import ActionChains
from selenium.common.exceptions import MoveTargetOutOfBoundsException
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.common.exceptions import NoSuchElementException
from selenium.common.exceptions import NoAlertPresentException
import os
import glob
fp = webdriver.FirefoxProfile('directory_on_computer')
browser = webdriver.Firefox(fp)
browser.get('a_website')
time.sleep(8)
browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").clear()
browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").send_keys("user")
browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").clear()
browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").send_keys("pass")
browser.find_element_by_id("ctl00_PlaceHolderMain_login_login").click()
try:
ReportMgr= browser.find_element_by_partial_link_text('Report Manager')
ReportMgr.click()
time.sleep(5)
CustomReport= browser.find_element_by_partial_link_text('Custom Report')
CustomReport.click()
time.sleep(5)
ProgramManagement= browser.find_element_by_partial_link_text('Program Management')
ProgramManagement.click()
ProgramManagement= browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_LEFT)
########testing area below
########Save below
for x in range(1, 71):
browser.find_element_by_partial_link_text('Program Management').click()
time.sleep(120)
browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_DOWN * x, Keys.ENTER)
time.sleep(120)
browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_CSVButton_ImageAnchor > img").click()
time.sleep(120)
browser.find_element_by_partial_link_text('Program Management').click()
time.sleep(120)
except:
pass
如果不需要完全重置,而是需要重置局部的自定义变量,请创建一个函数并使用函数命名空间。然后只需在循环中调用该函数并离开循环重新启动。
编辑 13th Mar 2016
#do one-time imports here
def exec_code():
## define local vars at the beginning of the code
counter = 0 ## counter is local to the function and dropped when leaving the func
## arbitrary function code
while True:
counter += 2
print "counter is %i, ending at 10" % counter
answer = raw_input("Restart? (Enter 'y'+return to restart): ")
if answer == "y":
return True ## Return True to exit the function and restart
if counter >= 10:
return False ## Return False or None to exit the loop and do not restart
while exec_code(): pass