首页 > 解决方案 > Python bot 在本地运行良好,但在 Heroku 崩溃

问题描述

我想为我的机器人使用 heroku 来检查亚马逊的价格。问题是当我运行 heroku logs --tail 时出现此错误。

2021-10-03T17:15:46.114624+00:00 app[worker.1]: Traceback (most recent call last):
2021-10-03T17:15:46.114652+00:00 app[worker.1]: File "/app/scraper.py", line 62, in <module>
2021-10-03T17:15:46.114750+00:00 app[worker.1]: check_price()
2021-10-03T17:15:46.114753+00:00 app[worker.1]: File "/app/scraper.py", line 32, in check_price
2021-10-03T17:15:46.114832+00:00 app[worker.1]: send_mail()
2021-10-03T17:15:46.114832+00:00 app[worker.1]: File "/app/scraper.py", line 46, in send_mail
2021-10-03T17:15:46.114906+00:00 app[worker.1]: server.login('gmail', 'password')
2021-10-03T17:15:46.114913+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/smtplib.py", line 745, in login
2021-10-03T17:15:46.115146+00:00 app[worker.1]: raise last_exception
2021-10-03T17:15:46.115153+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/smtplib.py", line 734, in login
2021-10-03T17:15:46.115376+00:00 app[worker.1]: (code, resp) = self.auth(
2021-10-03T17:15:46.115377+00:00 app[worker.1]: File "/app/.heroku/python/lib/python3.9/smtplib.py", line 657, in auth
2021-10-03T17:15:46.115575+00:00 app[worker.1]: raise SMTPAuthenticationError(code, resp)

我已按照步骤在 gmail 上访问不太安全的应用程序。我添加了 Procfile:worker:python scraper.py。我不知道该怎么办了。

import requests
from bs4 import BeautifulSoup
import re
import smtplib
import time
URL = 'https://www.amazon.se/Sony-ILCE6000LB-CEC-Alpha-Systemkamera-24-3mp/dp/B00IE9XHE0/ref=sr_1_1?dchild=1&keywords=systemkamera&qid=1629705873&s=videogames&sr=1-1'

headers = {
    "User-Agent": 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36'}


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_ourprice").get_text()

    converted_price = price

    s = converted_price

    list_number = re.findall(r'\d+', s)

    num = "".join(list_number)

    first_num = float(num[0:4])

    if (first_num < 6000):
        send_mail()

    print(title)
    print(float(first_num))

所以在这里我使用的是一个 gmail 帐户,我的应用程序不太安全,我将其发送到我的主要 gmail 帐户。当我在本地运行它时,它可以完美运行。

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

    server.login('gmail', 'password')

    subject = 'Price fell down'
    body = 'check the amazon link. https://www.amazon.se/Sony-ILCE6000LB-CEC-Alpha-Systemkamera-24-3mp/dp/B00IE9XHE0/ref=sr_1_1?dchild=1&keywords=systemkamera&qid=1629705873&s=videogames&sr=1-1'
    msg = f"Subject: {subject}\n\n{body}"
    server.sendmail(
        'gmail',
        'gmail',
        msg
    )

    print("email is sent")
    server.quit()


while (True):
    check_price()
    time.sleep(60 * 60)

这是我的要求。文本:

astroid==2.6.6
autopep8==1.5.7
beautifulsoup4==4.9.3
bs4==0.0.1
cachetools==4.2.2
certifi==2021.5.30
chardet==4.0.0
chardet2==2.0.3
charset-normalizer==2.0.4
colorama==0.4.4
configparser==5.0.2
crayons==0.4.0
cssselect==1.1.0
cssutils==2.3.0
cycler==0.10.0
Dmail==1.2.4
html2text==2020.1.16
idna==3.2
isort==5.9.3
kiwisolver==1.3.1
lazy-object-proxy==1.6.0
lxml==4.6.3
Markdown==3.3.4
matplotlib==3.4.3
mccabe==0.6.1
numpy==1.21.1
pandas==1.1.4
Pillow==8.3.1
premailer==3.10.0
pycodestyle==2.7.0
pylint==2.9.6
pyparsing==2.4.7
python-dateutil==2.8.2
pytz==2021.1
PyYAML==5.3.1
requests==2.26.0
selenium==3.141.0
six==1.16.0
soupsieve==2.2.1
toml==0.10.2
urllib3==1.26.6
webdriver-manager==3.2.2
wrapt==1.12.1

这就是我安装的:

astroid            2.6.6
autopep8           1.5.7
beautifulsoup4     4.10.0
bs4                0.0.1
certifi            2021.5.30
charset-normalizer 2.0.6
et-xmlfile         1.1.0
GDAL               3.3.1
idna               3.2
isort              5.9.3
lazy-object-proxy  1.6.0
lxml               4.6.3
mccabe             0.6.1
numpy              1.21.2
openpyxl           3.0.9
pandas             1.3.3
pip                21.2.4
protobuf           3.17.3
pycodestyle        2.7.0
pylint             2.9.6
python-dateutil    2.8.2
pytz               2021.1
requests           2.26.0
setuptools         57.0.0
six                1.16.0
soupsieve          2.2.1
toml               0.10.2
urllib3            1.26.7
wheel              0.36.2
wrapt              1.12.1
xlrd               2.0.1

标签: pythonherokuserverbots

解决方案


推荐阅读