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