WEBScarping TypeError: sendmail () отсутствует 1 обязательный позиционный аргумент: 'msg' - PullRequest
0 голосов
/ 25 февраля 2020

У меня ошибка в моем коде. Есть ли проблема с подключением к Gmail? Или есть другая проблема с моим кодом? Не могли бы вы показать мне, как решить эту проблему?

169,9
Garmin Forerunner 735XT GPS Мультиспортивные и беговые часы, черный / серый отслеживания (последний вызов последний):
Файл "C: \ Users \ Пользователь \ source \ repos \ RCS_WEB_SCRAPER \ RCS_WEB_SCRAPER \ RCS_WEB_SCRAPER.py ", строка 52, в check_price ()
Файл" C: \ Users \ Пользователь \ source \ repos \ RCS_WEB_SCRAPER \ RC_RAP ", строка 29, в check_price send_mail ()
Файл" C: \ Users \ Пользователь \ source \ repos \ RCS_WEB_SCRAPER \ RCS_WEB_SCRAPER \ RCS_WEB_SCRAPER.py ", строка 46, в сообщении send_mail msg
TypeError: sendmail ( ) отсутствует 1 обязательный позиционный аргумент: 'msg'

МОЙ КОД

import requests
from bs4 import BeautifulSoup
import smtplib
import time


URL = 'https://www.amazon.co.uk/Garmin-Forerunner-735XT-Multisport-Running-Black-Grey/dp/B01DWIY39A/ref=sr_1_3?keywords=garmin&qid=1582615813&sr=8-3'

headers = {
    "User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0'}


def check_price():
    page = requests.get(URL, headers=headers)

    soup = BeautifulSoup(page.content, 'html.parser')

    title = soup.find(id ="productTitle").get_text()
    price = soup.find(id="priceblock_dealprice").get_text()
    converted_price = float(price[1:6])

    if(converted_price < 160.00):
        send_mail()

    print(converted_price)
    print(title.strip())

    if(converted_price > 160.00):
        send_mail()

def send_mail():
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.ehlo()
    server.starttls()
    server.ehlo()

    server.login('address', 'mAJnkzjfTqw8xJe')

    subject = 'Price decreased!'
    body = 'Now it is time to buy: https://www.amazon.co.uk/Garmin-Forerunner-735XT-Multisport-Running-Black-Grey/dp/B01DWIY39A/ref=sr_1_3?keywords=garmin&qid=1582615813&sr=8-3'

    msg = f"Subject: {subject}\n\n{body}"

    server.sendmail(
        'address@gmail.com',
        msg 
    )
    print('E-mail has been sent!')
    server.quit()

while(True):
    check_price()
    time.sleep(28800)

1 Ответ

0 голосов
/ 25 февраля 2020

Sendmail требует 3 аргумента для передачи ему. Адрес отправителя, список адресов и сообщение для отправки.

из документации https://docs.python.org/3/library/smtplib.html#smtplib .SMTP.sendmail

Обязательные аргументы: строка с адресом RF C 822, список строк с адресом RF C 822 (пустая строка будет рассматриваться как список с 1 адресом) и строка сообщения.

Вам нужно обновить свой код, где вы вызываете server.sendmail, чтобы включить адрес от и адрес, а затем ваше сообщение.

...