#python
#python
Вопрос:
Мой приведенный ниже код открывает X количество URL-адресов, используя Selenium, и перебирает их. Я проверяю, есть ли ‘missing_amounts’ в icl_dollar_amount . Если это так, я очищаю данные на веб-сайте и сохраняю их в списках. Если нет, я добавляю суммы в другой список и отправляю электронное письмо, используя функцию sendMissingFileEmail(GetFileName(sql_server_conn, sql_server_cursor, amount_ack_missing_l)). Проблема, с которой я сталкиваюсь, заключается в том, что я получаю кучу повторяющихся электронных писем, и у меня такое чувство, что это связано с двумя циклами For в моем file2.py . Один из них, который я перебираю по URL-адресам, открывает несколько ссылок, а другой цикл for предназначен для перебора списка, чтобы получить недостающие суммы. К вашему сведению, если я закомментирую блок else:amount_ack_missing_l.append(amount), повторяющиеся электронные письма прекратятся, но это потому, что в нем есть функция электронной почты.
ожидаемые результаты:
Missing filename Test in the amount of $40,752.25
Missing filename Test2 in the amount of $64,452.96
фактические результаты:
Missing filename Test in the amount of $40,752.25
Missing filename Test2 in the amount of $64,452.96
Missing filename Test in the amount of $40,752.25
Missing filename Test2 in the amount of $64,452.96
Missing filename Test in the amount of $40,752.25
Missing filename Test2 in the amount of $64,452.96
file2.py
def scrapeBOAWebsite(url,fcg_subject_l, gp_subject_l):
from ICL_Awk_Checker import rps_amount_l2
icl_dollar_amount_l = []
file_date_l = []
company_id_l = []
client_id_l = []
customer_name_l = []
file_name_l = []
file_total_l = []
item_count_l = []
file_status_l = []
amount_ack_missing_l = []
for link in url:
print(link)
browser = webdriver.Chrome(options=options,
executable_path=r'\TESTuser$TESTDocumentsdriverchromedriver.exe')
# if 'P2 Cust ID 908554 File' in fcg_subject:
browser.get(link)
username = browser.find_element_by_name("dialog:username").get_attribute('value')
if 'test@email.com' in username:
try:
password = browser.find_element_by_xpath("//*[@id='dialog:password']").send_keys('PPCsm2021
Ответ №1:
В scrapeBOAWebsite()
функции эта часть:
if amount_ack_missing_l:
sendMissingFileEmail(getFileName(sql_server_conn, sql_server_cursor, amount_ack_missing_l))
... имеет отступ (только на один пробел, но он все равно учитывается) в основном цикле:
for link in url:
Таким образом, вы отправляете весь список адресов электронной почты каждый раз через цикл.
Комментарии:
1. ах, да, это была проблема! Теперь у меня возникла еще одна проблема с дублированием в else: amount_ack_missing_l.append(сумма)
)
except NoSuchElementException:
print("Incorrect Username/Password")
elif 'test2@email.com' in username:
try:
password = browser.find_element_by_xpath("//*[@id='dialog:password']").send_keys('TEST123')
except NoSuchElementException:
print("Incorrect Username/Password")
submit = browser.find_element_by_xpath("//*[@id='dialog:continueButton']").click()
body = browser.find_element_by_xpath("//*[contains(text(), 'Total:')]").text
icl_dollar_amount = re.findall('(?:[£$€]{1}[,d] .?d*)', body)[0]
if not missing_amount:
logging.info("List is empty")
print("List is empty")
for amount in missing_amount:
print(amount)
if amount in icl_dollar_amount:
icl_dollar_amount_l.append(icl_dollar_amount)
file_name_l.append(get_file_name)
get_file_total = re.findall('(?:[£$€]{1}[,d] .?d*)', body)[0].split('
Ответ №1:
В scrapeBOAWebsite()
функции эта часть:
... имеет отступ (только на один пробел, но он все равно учитывается) в основном цикле:
Таким образом, вы отправляете весь список адресов электронной почты каждый раз через цикл.
Комментарии:
1. ах, да, это была проблема! Теперь у меня возникла еще одна проблема с дублированием в else: amount_ack_missing_l.append(сумма)
,1)[1]
file_total_l.append(get_file_total)
get_item_count = body.split("Number of Items:")[1].split(' ')[1].strip()
item_count_l.append(get_item_count)
get_file_date = body.split("Receipt Time:")[1].split("nn")[0].strip()
file_date_l.append(get_file_date)
get_file_status = body.split("Status:")[1].split("nn")[0].strip()
file_status_l.append(get_file_status)
else:
amount_ack_missing_l.append(amount)
logging.info("Missing Files " str(amount))
print("Missing Files " str(amount))
if amount_ack_missing_l:
sendMissingFileEmail(getFileName(sql_server_conn, sql_server_cursor, amount_ack_missing_l))
return icl_dollar_amount_l, file_date_l, company_id_l, client_id_l, customer_name_l, file_name_l, file_total_l,
item_count_l, file_status_l, amount_ack_missing_l
def getFileName(sql_server_conn, sql_server_cursor, amount_ack_missing_l):
cd = datetime.now() - timedelta(days=1)
cd = cd.strftime('%m/%d/%Y')
missing_file_l = []
for amount in amount_ack_missing_l:
rps_table_q_2 = f"""select * from rps..sendfile where processingdate = '{cd}' and datasetname like '%ICL%' and paymenttotamt = '{amount}' """
rps_table_results = sql_server_cursor.execute(rps_table_q_2).fetchall()
for rps in rps_table_results:
rps_amount_f = str(rps[18]).rstrip('0')
rps_amount_f = ("{:,}".format(float(rps_amount_f)))
rps_amount_l2.append(rps_amount_f)
missing_file = "Missing filename " rps[6] " in the amount of $" rps_amount_f
missing_file_l.append(missing_file)
return missing_file_l
def sendMissingFileEmail(missing_file_l):
## START OF EMAIL SCRIPT
# Define variables to construct email
addr_from = 'test@email.com'
addr_to = 'test@email.com'
smtp_server = 'email.test.com'
port = '25'
subject = '**Missing File**'
for missing_file in missing_file_l:
html = f"""
{missing_file}
"""
# Construct email
msg = MIMEMultipart()
msg['Subject'] = subject
msg['From'] = addr_from
msg['To'] = addr_to
# rcpt = bcc.split(";") [addr_to]
body = html
# Attach HTML to body and
attachHTML = MIMEText(body, 'html')
msg.attach(attachHTML)
# Add Server and Port to SMTP Object
s = smtplib.SMTP(smtp_server, port)
# Send email with defined variables
s.sendmail(addr_from, addr_to, msg.as_string())
s.quit()
icl_dollar_amount_l, file_date_l, company_id_l, client_id_l, customer_name_l, file_name_l,
file_total_l, item_count_l,file_status_l, amount_ack_missing_l = scrapeBOAWebsite(url, fcg_subject_l,
gp_subject_l)
Ответ №1:
В scrapeBOAWebsite()
функции эта часть:
… имеет отступ (только на один пробел, но он все равно учитывается) в основном цикле:
Таким образом, вы отправляете весь список адресов электронной почты каждый раз через цикл.
Комментарии:
1. ах, да, это была проблема! Теперь у меня возникла еще одна проблема с дублированием в else: amount_ack_missing_l.append(сумма)