我希望我的脚本在发生错误时从中断的地方重试。我正在使用 selenium 下载多个报告。有时,报告将无法正确加载。我希望脚本在出错时记住它的位置并重新尝试提取报告。 (我需要脚本记住 x 的值)。
这是一些可能有帮助的代码......(我迫切需要帮助)
import time
import os
import glob
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
for x in range(1, 51):
while True:
try:
fp = webdriver.FirefoxProfile('C:/Users//Documents/FirefoxProfile')
browser = webdriver.Firefox(fp)
browser.get('https://reportlocation/')
time.sleep(8)
browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").clear()
browser.find_element_by_id("ctl00_PlaceHolderMain_login_UserName").send_keys("ytb971")
browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").clear()
browser.find_element_by_id("ctl00_PlaceHolderMain_login_password").send_keys("Fender25")
browser.find_element_by_id("ctl00_PlaceHolderMain_login_login").click()
#gets user to reporting front end
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)
#pulls reports
browser.find_element_by_partial_link_text('Program Management').click()
time.sleep(10)
browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_DOWN * x, Keys.ENTER, Keys.ENTER)
time.sleep(30)
browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_CSVButton_ImageAnchor > img").click()
time.sleep(10)
browser.find_element_by_partial_link_text('Program Management').click()
time.sleep(10)
browser.quit()
except:
continue
else:
break
最佳答案
您在这里所做的是迭代超过 50 个 x
的值。 ,并且一旦一次访问失败,您就会再次递归地开始迭代所有 50 个值。重复逻辑应该如下所示:
for x in range(1, 51):
while True: # or some condition to put a bound on retries
try:
...
except:
continue
else:
break
therest()
这样,您仍然可以在 50 个值的循环内捕获每个异常,并在正在运行的迭代中执行重试,因此请记住
x
的当前值成为一个非问题。注意 else
的使用与 try
声明:else
如果没有发生异常,则执行子句;这是您想要停止重试当前值 x
的时候。 .
关于python - 重试python中脚本/程序停止的地方,记住变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35879625/