Python:如果计数的文件数不等于x,则重试报告拉取

Python:如果计数的文件数不等于x,则重试报告拉取,python,selenium,Python,Selenium,我正在尝试计算保存报告的目录中的文件数。如果文件数不等于X+1,那么我想重新运行下载报告的代码的中间部分。我必须使用这种方法,因为我处理的是CSV文件,它们按顺序下载(报告(1),报告(2),等等)。随后,我将这些报告的名称更改为代码中的真实名称 import time import os import os.path import glob import shutil from selenium.webdriver.common.action_chains import ActionChain

我正在尝试计算保存报告的目录中的文件数。如果文件数不等于X+1,那么我想重新运行下载报告的代码的中间部分。我必须使用这种方法,因为我处理的是CSV文件,它们按顺序下载(报告(1),报告(2),等等)。随后,我将这些报告的名称更改为代码中的真实名称

import time
import os
import os.path
import glob
import shutil
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

files = glob.glob('/Users/me/Desktop/AUTOREPORTS/*')
for f in files:
    os.remove(f)        

open('/Users/me/Desktop/AUTOREPORTS/report.csv', "w")

for x in range(1, 73):      
    while True:    
        try:
            fp = webdriver.FirefoxProfile('C:/Users/me/Documents/FirefoxProfile')
            browser = webdriver.Firefox(fp)
            browser.get('https://website.com/')

            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("PWD")
            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(60)
            browser.find_element_by_partial_link_text('Program Management').send_keys(Keys.ARROW_DOWN * x, Keys.ENTER)
            time.sleep(60)
            try:
                browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_updateFilters_TitleAnchor").click()            
            except NoSuchElementException:
                pass           
            time.sleep(140)            
            browser.find_element_by_css_selector("#ctl00_PlaceHolderMain_ReportViewer1_HtmlOutputReportResults2_CSVButton_ImageAnchor > img").click()
            time.sleep(140)            
            fname = "Report(%s).csv" % (x)
            os.chdir('/Users/me/Desktop/AUTOREPORTS')
            browser.quit()
            #counts number of files in DIR
            path = 'C:/Users/me/Desktop/AUTOREPORTS'
            count = len([f for f in os.listdir(path) if os.path.isfile(os.path.join(path, f))])
            print count   
            #end count of number of files in DIR
        except:
               browser.quit()           
               continue
        else:
               break
这是我获取计数的代码部分-但是我不确定是否要告诉Python,如果此计数不等于X+1,则重试(X):


只要一个常规的
if
语句就可以了。也许可以将中间部分提取到一个可以调用的函数中。这样,您就不必重写
if
语句中的所有代码

if count != x + 1:
    # Do what you need to download the file again
另外,不要在大型的
try/accept
中执行此操作,而是使用
contextlib
创建一个可以与
with
语句一起使用的函数。例如:

from contextlib import contextmanager


@contextmanager
def quitting(thing):
    yield thing
    thing.close()
    thing.quit()
然后像这样打开驱动程序:

with quitting(webdriver.Firefox(fp)) as browser:
    # Put your code here.

这样,如果出现错误,它将在
WebDriver
实例上调用
close
quit

这就是问题所在。我真的不知道该怎么办:(我想可能是如果count==x+1:#等于打印计数elif count!=count+1:#不等于x-1continue@Yogwhatup,提取需要重新运行到函数中的中间部分。如果需要重新下载报告,则调用该函数。这使我了解非常感谢!
with quitting(webdriver.Firefox(fp)) as browser:
    # Put your code here.