Selenium Webdriver Chrome创建许多线程

时间:2018-04-17 17:45:24

标签: python selenium-webdriver selenium-chromedriver apscheduler

我对这个必须修复的WallBoard webapp(Python)有些麻烦,我希望我能清楚问题是什么,所以你很容易理解并帮助我。

因此,该应用程序有3页,主页,呼叫等待,门票。该公司的支持团队使用它来跟踪当天的电话和门票。

因此,当我使用VS Code运行此应用程序时,其行为绝对正常。应用程序记录到另一个网站以检索呼叫信息,而数据库用于检索故障单信息。一段时间后会话到期(检索呼叫信息),但应用程序检测并再次登录。

当我在IIS(8.5)启动应用程序时,每隔17分钟该应用程序就会无缘无故地重新启动,经过几个小时后,我有40到50个谷歌浏览器线程从托管的机器中获取所有内存。 ..

我不相信它是IIS的一个问题,我认为它出于某种原因正在响应,我无法找到答案。

以下是WallBoard App的代码

from datetime import datetime
from flask import Flask, g, render_template
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import pypyodbc as pyodbc
import time
import sys, socket
from funcs import *
from config import *
from querys import *
from cachetools import LRUCache
from apscheduler.schedulers.background import BackgroundScheduler

# Init
app = Flask(__name__)

app.debug = True


# Globals
CALLS_WAITING_CACHE = LRUCache(maxsize=20)
TICKETS_CACHE = LRUCache(maxsize=20)
op = Options()
op.binary_location = "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe"
op.add_argument("--headless")
op.add_argument("--disable-gpu")
browser = webdriver.Chrome(chrome_options=op, executable_path=r'C:\Python34\Scripts\chromedriver.exe')

with open('log.txt', 'a') as f:
    print('Walboard Starting! - ' + str(datetime.now()), file=f)


def login():

# Here i log in to the website where i get calls information

###################################################################


@app.before_request
def before_request():
    """Before Request"""

    g.request_start_time = time.time()
    g.request_time = lambda: "%.5f" % (time.time() - g.request_start_time)

####################################################################


@app.route('/')
def index():
    """Landing Page"""
    return render_template("landing.html",
                           dashboard_name='TSU WallBoard',
                           css_folder='/static/css/',
                           CallsWaiting_Page='/callswaiting',
                           Tickets_Page='/tickets'
                           )

####################################################################


def calls_waiting():
  #  Here i take the information and store in in cache thanks to cachetools

   ############################################################################


@app.route('/callswaiting')
def calls_wainting_render():
    # Here i take information from cache and show it in the webpage of the app


####################################################################


def tickets():
    # Here i do the same with tickets, load from DB and store in cache

@app.route('/tickets')
def tickets_render():
    # Here i load tickets from cache and show them in Web Page

##########################################################

# Login to avaya website
login()
time.sleep(3)
# Get calls and store in cache
calls_waiting()
# Get tickets and store in cache
tickets()

# Create scheduler obj
sched = BackgroundScheduler(daemon=True)
# Create Jobs
sched.add_job(calls_waiting, 'interval', seconds=refresh_time_calls,
              max_instances=1, id='calls_waiting')
sched.add_job(tickets, 'interval', seconds=refresh_time_tickets,
              max_instances=1, id='tickets')
# Start scheduler              
sched.start()

with open('log.txt', 'a') as f:
    print('WallBoard Started! - ' + str(datetime.now()), file=f)

if __name__ == "__main__":

    app.run()

所以在这一点上我完全迷失了,我已经做了几个小时的研究,试图找出问题所在,但仍然没有运气。 我拿出里面的代码,因为它太大了,但如果有必要,我可以提供它。 我正在使用PhantomJS,但我总是得到弃用的警告,我决定改变做ChromeDrive,但问题仍然存在。 它可以与BackgroundScheduler一起使用吗?因为我开始认为每次IIS强制重启应用程序时,都会创建更多的作业并且不会杀死其他作业。

我感谢所有的帮助和提示,我很抱歉这篇长篇文章!

enter image description here

我在运行10分钟后拍摄此屏幕,我将在早上更新新照片

0 个答案:

没有答案