Дублирование результатов при отправке электронной почты

#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(сумма)