簡體   English   中英

pythonanywhere flask應用程序中的連接被拒絕

[英]Connection refused in pythonanywhere flask app

from selenium import webdriver
from flask import Flask, render_template
import random
from pyvirtualdisplay import Display
from selenium.webdriver.firefox.options import Options as FirefoxOptions

app = Flask(__name__)
with Display():
     options = FirefoxOptions()
     options.add_argument('--headless')
     driver = webdriver.Firefox(firefox_options=options)
     driver.implicitly_wait(10)
     t_file = '/home/parshuram/mysite/static/links'
     target = open(t_file).read().splitlines()
try:
    @app.route('/')
    def get_jokes():
        driver.get(random.choice(target))
        jokes = driver.find_elements_by_tag_name('p')
        mylist = []
        for joke in jokes:
            mylist.append(joke.text)
            return render_template('/home/parshuram/mysite/Template/joke.html', s=mylist)

    if __name__ == "__main__":
        app.run()
finally:
    driver.quit()

2020-10-05 17:59:33,327:/[GET] 回溯異常(最近一次調用):文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/flask/app .py”,第 2446 行,在 wsgi_app response = self.full_dispatch_request() 文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/flask/app.py”,第 1951 行,在 full_dispatch_request rv = self.handle_user_exception(e) 文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/flask/app.py”, line 1820, in handle_user_exception reraise(exc_type, exc_value, tb)文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/flask/_compat.py”,第 39 行,重新加注提升值文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/ python3.8/site-packages/flask/app.py”,第 1949 行,在 full_dispatch_request rv = self.dispatch_request() 文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3.8/site-packages/flask /app.py”,第 1935 行,在 dispatch_request 中返回 self.view_functionsrule.endpoin t 文件“/home/parshuram/mysite/sick.py”,第 18 行,在 get_jokes driver.get(random.choice(target)) 文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3.8/site -packages/selenium/webdriver/remote/webdriver.py”,第 248 行,在 get self.execute(Command.GET, {'url': url}) 文件中“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3 .8/site-packages/selenium/webdriver/remote/webdriver.py”,第 234 行,在執行 response = self.command_executor.execute(driver_command, params) 文件“/home/parshuram/.virtualenvs/myvirtualenv/lib/python3 .8/site-packages/selenium/webdriver/remote/remote_connection.py", line 401, in execute return self._request(command_info[0], url, body=data) File "/home/parshuram/.virtualenvs/myvirtualenv /lib/python3.8/site-packages/selenium/webdriver/remote/remote_connection.py”,第 432 行,在 _request self._conn.request(method, parsed_url.path, body, headers) 文件“/usr/lib/ python3.8/http/client.py", line 1230, in request self._send_request(method, url, body, headers, encode_ch unked) 文件“/usr/lib/python3.8/http/client.py”,第 1276 行,在 _send_request self.endheaders(body, encode_chunked=encode_chunked) 文件“/usr/lib/python3.8/http/client. py”,第 1225 行,在 endheaders self._send_output(message_body, encode_chunked=encode_chunked) 文件“/usr/lib/python3.8/http/client.py”,第 1004 行,在 _send_output self.send(msg) 文件“/ usr/lib/python3.8/http/client.py”,第 944 行,在發送 self.connect() 文件“/usr/lib/python3.8/http/client.py”,第 915 行,在自我連接中。 sock = self._create_connection( File "/usr/lib/python3.8/socket.py", line 807, in create_connection raise err File "/usr/lib/python3.8/socket.py", line 796, in create_connection sock.connect(sa) ConnectionRefusedError: [Errno 111] 連接被拒絕

它說應用程序有錯誤或服務器過載。 現在,這只是從笑話站點中提取一些文本。 因此,該站點不太可能拒絕連接。 有任何想法嗎?

被拒絕的連接是 Selenium 內部的——它啟動 Firefox 並連接一個小型服務器以控制它,然后通過套接字連接與其通信。 原因是您在“最終”塊中關閉了瀏覽器。 在與“finally”關聯的 try 塊中,您定義了視圖函數get_jokes ,但是當稍后實際調用它時, try/finally 塊已經退出,因此沒有瀏覽器在運行——因此 Selenium 連接到它失敗。

您應該將完整的 try/finally 塊放在視圖函數中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM