Hiromu1612
@Hiromu1612

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

HerokuでFlaskが上手く動作しない

解決したいこと

HerokuでFlaskを使ったスクレイピングサイトを公開したいのですが、@app.route('/') から @app.route('/scraping', methods=["GET","POST"]) にページが遷移しません。エラーが出ていますが、ローカルでは作動しています。

追記: 解答から、HerokuのBuildpacksにバイナリを追加してページ遷移できるようになりましたが、スクレイピングができません。

発生している問題・エラー

ターミナルでheroku logs --tail --app test2ee を入力するとこのようなlogになっています。
64b9aae4-f2a1-4801-9389-ef441c194454.jpeg

追記:解答から修正し、再びlogを見ると以下のようなエラーが出ました。Heroku_logs.jpg
コマンドプロンプト.jpg

Procfile
web: gunicorn app:app --log-file=-
web: gunicorn --worker-class=gevent --worker-connections=1000 --workers=3 app:app
web: gunicorn app:app --timeout 300
amazon.py
from selenium import webdriver
import time
from selenium.webdriver.chrome.options import Options
import re
import chromedriver_binary

options=Options()
options.add_argument('--headless')                         
options.add_argument('--disable-gpu')                      
options.add_argument('--disable-extensions')               
options.add_argument('--proxy-server="direct://"')         
options.add_argument('--proxy-bypass-list=*')              
options.add_argument('--blink-settings=imagesEnabled=false')
options.add_argument('--lang=ja')                          
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument("--log-level=3")
options.add_argument('--user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36')
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.page_load_strategy = 'eager'
driver = webdriver.Chrome(options=options)

def amazon(word):
    try:
        print("Amazon_スクレイピング開始")
        driver.get("https://www.amazon.co.jp/")

     省略

        list_amazon=["【Amazon】",product_name_amazon.text,""+price_amazon.text,shipping_fee_amazon.contents[1].text,point_amazon[0],url_amazon]

        print("Amazon_スクレイピング完了")

    except:
        print("Amazon_スクレイピング失敗")
        list_amazon=["【Amazon】","-","-","-","-","-"]

    return list_amazon
app.py
from flask import Flask, render_template,request
import os

app = Flask(__name__)


@app.route('/')
def index():
    return render_template('index.html')


@app.route('/scraping', methods=["GET","POST"])
def do_scraping():
    import amazon
    word=request.form["search_word"]

    list_amazon = amazon.amazon(word)

    return render_template('result.html',word=word,list_amazon=list_amazon)

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)), debug=True)

自分で試したこと

FlaskはWebUIを使い、スクレイピングの処理(amazon.py)はWebSocketを使えばよいと考えましたが、よくわかりませんでした。おそらくターミナルのlogにエラー原因が書いてあるのですが、読み取ることができないので教えていただきたいです。

0

1Answer

2023-12-03T23:54:37.951300+00:00 app [web.1]: selenium. common.exceptions. WebDriverException: Message: unknown error: cannot find Chrome binary

Heroku環境にChrome driverが無い?

2Like

Comments

  1. @Hiromu1612

    Questioner

    解答ありがとうございます。HerokuのBuildpacksに追加してページ遷移はできるようになりましたが、追記画像のようにスクレイピングが失敗してしまいます。どのようにすれば良いでしょうか?

  2. exceptionの内容を表示すれば、何か分かるかも?

    -   except:
            print("Amazon_スクレイピング失敗")
            list_amazon=["【Amazon】","-","-","-","-","-"]
    
    
    +   except Exception as e:
            print("Amazon_スクレイピング失敗")
    +       print(e)
    +       import traceback
    +       traceback.print_exc()
            list_amazon=["【Amazon】","-","-","-","-","-"]
    
    
  3. @Hiromu1612

    Questioner

    tracebackでsession deleted because of page crashととエラーの内容が出てきました。どのようにすればよいか教えていただけると幸いです。
    traceback.jpg

  4. selenium.common.exceptions.WebDriverException Message unknown error session deleted because of page crash

    ↓こちらと同件と思われます。

Your answer might help someone💌