首页 > 解决方案 > selenium 浏览器用keyboard.read_key() 关闭

问题描述

为什么 selenium 浏览器在第 207 行(keyboard.read_key())运行时关闭?

该代码昨天正常工作

import datetime as dt
import sys
from time import sleep
import keyboard
import os
from posixpath import dirname
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


filePath = os.path.dirname(__file__)
driverName = "chromedriver.exe"

path = os.path.join(filePath, driverName)

#handle your connection is not private
options = webdriver.ChromeOptions()
options.add_argument('--ignore-ssl-errors=yes')
options.add_argument('--ignore-certificate-errors')
options.add_experimental_option("prefs", { \
    "profile.default_content_setting_values.media_stream_mic": 1
})
options.add_experimental_option('excludeSwitches', ['enable-logging'])

username = "30200360086"
password = "Nima1383*"

usernameLoginXPath = '//*[@id="username"]'
passwordLoginXPath = '//*[@id="password"]'
singinButtonLoginXPath = '//*[@id="loginbtn"]'
statusBarSpanXPath = '//span[@id="status_bar_span"]'
loginClassButtonXPath = '//*[@id="join_button_input"]'
microphoneOpenedXPath = "/html/body/div[2]/div/div/div[1]/header/h3"
microphoneButtonXPath = '/html/body/div[2]/div/div/div[1]/div/div/span/button[1]'
microphoneButtonXPath = '/html/body/div[2]/div/div/div[1]/div/div/span/button[1]'
microphoneOpenedYesXPath = "/html/body/div[2]/div/div/div[1]/header/h3"
microphoneOpenedYesButtonXPath = "/html/body/div[2]/div/div/div[1]/div/span/button[1]"
microphoneXPath = '//*[@id="tippy-190"]'

classOpenedText = "This conference is in progress."
microphoneOpenedText = "چنانچه مایل هستید تا از امکانات صوتی ذیل استفاده کنید، روی آن کلیک نمایید."
microphoneOpenedYesText = "این آزمایش اکوی صدای شخصی است. چند کلمه صحبت کنید. ایا صدا را می شنوید؟"
mocrophoneOffText = "حالت بی صدا"

zaminShenasi = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1219"
tarikhMoaser = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1220"
amarVaEhtemal = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1226"
hesaban = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1225"
hendese = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1224"
negaresh = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1227"
farsi = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1228"
arabi = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1229"
dini = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1230"
fizik = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1222"
shimi = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1223"
zaban = "https://lms.helli3.ir/mod/bigbluebuttonbn/view.php?id=1221"

webBrowser = "google-chrome"

weekName = ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
schoolWeekName = ["Saturday", "Sunday", "Monday", "Tuesday", "Wednesday"]
startSchoolTime = "08:00"
endSchoolTime = "14:35"
startSchoolTimeHour = 7
endSchoolTimeHour = 14
zang1 = "08:00"
zang2 = "09:40"
zang3 = "11:20"
zang4 = "14:15"

isOpen = False

hotkey = "shift + ctrl + F2"
lesson = 1
isPress = False

df = dt.datetime.today()

clearConsole = lambda: os.system('cls' if os.name in ('nt', 'dos') else 'clear')
clearConsole()

def openClass(username, password, lessonName):
    driver = webdriver.Chrome(executable_path = path, options=options)
    driver.get(lessonName)

    usernameInput = driver.find_element_by_xpath(usernameLoginXPath)
    passwordInput = driver.find_element_by_xpath(passwordLoginXPath)
    loginButton = driver.find_element_by_xpath(singinButtonLoginXPath)
    usernameInput.send_keys(username)
    passwordInput.send_keys(password)
    loginButton.click()

    # statusBarSpan = driver.find_element_by_xpath(statusBarSpanXPath)
    while driver.find_element_by_xpath(statusBarSpanXPath).text != classOpenedText:
        clearConsole()
        # print(statusBarSpan.text)
        print(driver.find_element_by_xpath(statusBarSpanXPath).text)
        sleep(5)

    driver.find_element_by_xpath(loginClassButtonXPath).click()

    driver.switch_to.window(driver.window_handles[1])

    microphoneOpened = ""
    while microphoneOpened != microphoneOpenedText:
        try:
            microphoneOpened = driver.find_element_by_xpath(microphoneOpenedXPath).text
        except:      
            sleep(1)

    driver.find_element_by_xpath(microphoneButtonXPath).click()

    microphoneOpened = ""
    while microphoneOpened != microphoneOpenedYesText:
        try:
            microphoneOpened = driver.find_element_by_xpath(microphoneOpenedYesXPath).text
        except:      
            sleep(1)

    driver.find_element_by_xpath(microphoneOpenedYesButtonXPath).click()

    sleep(1)
    microphone = driver.find_element_by_xpath('//button[@accesskey="M"]')
    if microphone.get_attribute("aria-label") == mocrophoneOffText:
        microphone.click()

if df.strftime("%A") in schoolWeekName:
    while int(df.strftime("%H")) >= startSchoolTimeHour and int(df.strftime("%H")) <= endSchoolTimeHour:
        if df.strftime("%A") == schoolWeekName[0]:
            if df.strftime("%H:%M") == zang1 and isOpen == False:
                openClass(username, password, farsi)
                isOpen = True
            elif df.strftime("%H:%M") == zang2 and isOpen == False:
                openClass(username, password, hesaban)
                isOpen = True
            elif df.strftime("%H:%M") == zang3 and isOpen == False:
                openClass(username, password, negaresh)
                isOpen = True
            elif df.strftime("%H:%M") == zang4 and isOpen == False:
                openClass(username, password, amarVaEhtemal)
                isOpen = True
            elif df.strftime("%H:%M") != zang1 and df.strftime("%H:%M") != zang2 and df.strftime("%H:%M") != zang3 and df.strftime("%H:%M") != zang4:
                isOpen = False
        if df.strftime("%A") == schoolWeekName[1]:
            if df.strftime("%H:%M") == zang1 and isOpen == False:
                openClass(username, password, fizik)
                isOpen = True
            elif df.strftime("%H:%M") == zang2 and isOpen == False:
                openClass(username, password, tarikhMoaser)
                isOpen = True
            elif df.strftime("%H:%M") == zang3 and isOpen == False:
                openClass(username, password, hendese)
                isOpen = True
            elif df.strftime("%H:%M") == zang4 and isOpen == False:
                openClass(username, password, hendese)
                isOpen = True
            elif df.strftime("%H:%M") != zang1 and df.strftime("%H:%M") != zang2 and df.strftime("%H:%M") != zang3 and df.strftime("%H:%M") != zang4:
                isOpen = False 
        if df.strftime("%A") == schoolWeekName[2]:
            if df.strftime("%H:%M") == zang1 and isOpen == False:
                openClass(username, password, zaminShenasi)
                isOpen = True
            elif df.strftime("%H:%M") == zang2 and isOpen == False:
                openClass(username, password, shimi)
                isOpen = True
            elif df.strftime("%H:%M") == zang3 and isOpen == False:
                openClass(username, password, dini)
                isOpen = True
            elif df.strftime("%H:%M") == zang4 and isOpen == False:
                openClass(username, password, shimi)
                isOpen = True
            elif df.strftime("%H:%M") != zang1 and df.strftime("%H:%M") != zang2 and df.strftime("%H:%M") != zang3 and df.strftime("%H:%M") != zang4:
                isOpen = False
        if df.strftime("%A") == schoolWeekName[3]:
            if df.strftime("%H:%M") == zang1 and isOpen == False:
                openClass(username, password, hesaban)
                isOpen = True
            elif df.strftime("%H:%M") == zang2 and isOpen == False:
                openClass(username, password, shimi)
                isOpen = True
            elif df.strftime("%H:%M") == zang3 and isOpen == False:
                openClass(username, password, hesaban)
                isOpen = True
            elif df.strftime("%H:%M") == zang4 and isOpen == False:
                openClass(username, password, arabi)
                isOpen = True
            elif df.strftime("%H:%M") != zang1 and df.strftime("%H:%M") != zang2 and df.strftime("%H:%M") != zang3 and df.strftime("%H:%M") != zang4:
                isOpen = False
        if df.strftime("%A") == schoolWeekName[4]:
            if df.strftime("%H:%M") == zang1 and isOpen == False:
                openClass(username, password, fizik)
                isOpen = True
            elif df.strftime("%H:%M") == zang2 and isOpen == False:
                isOpen = True
            elif df.strftime("%H:%M") == zang3 and isOpen == False:
                openClass(username, password, fizik)
                isOpen = True
            elif df.strftime("%H:%M") == zang4 and isOpen == False:
                openClass(username, password, zaban)
                isOpen = True
            elif df.strftime("%H:%M") != zang1 and df.strftime("%H:%M") != zang2 and df.strftime("%H:%M") != zang3 and df.strftime("%H:%M") != zang4:
                isOpen = False
        sleep(1)
        df = dt.datetime.today()
        clearConsole()
        print(f"{100 * chr(8)}{df.strftime('%H:%M:%S')}", end="", flush=True)
        if keyboard.read_key() == hotkey:
            clearConsole()
            print("ZaminShenasi <--|\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
            while keyboard.is_pressed("enter") == False:
                if keyboard.is_pressed("up") and isPress == False:
                    isPress = True
                    lesson -= 1
                    if lesson < 1:
                        lesson = 1
                elif keyboard.is_pressed("down") and isPress == False:
                    isPress = True
                    lesson += 1
                    if lesson > 12:
                        lesson = 12
                elif keyboard.is_pressed("up") == False and keyboard.is_pressed("down") == False:
                    isPress = False

                if lesson == 1 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi <--|\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 2 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser <--|\nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 3 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal <-|\nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 4 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban <-------|\nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 5 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese <-------|\nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 6 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh <------|\nFarsi \nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 7 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi <---------|\nArabi \nDini \nFizik \nShimi \nZaban ")
                elif lesson == 8 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi <---------|\nDini \nFizik \nShimi \nZaban ")
                elif lesson == 9 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini <----------|\nFizik \nShimi \nZaban ")
                elif lesson == 10 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik <---------|\nShimi \nZaban ")
                elif lesson == 11 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi <---------|\nZaban ")
                elif lesson == 12 and isPress == True:
                    clearConsole()
                    print("ZaminShenasi\nTarikhMoaser \nAmarVaEhtemal \nHesaban \nHendese \nNegaresh \nFarsi \nArabi \nDini \nFizik \nShimi \nZaban <---------|")
                sleep(0.05)
            if lesson == 1:
                openClass(username, password, zaminShenasi)
            elif lesson == 2:
                openClass(username, password, tarikhMoaser)
            elif lesson == 3:
                openClass(username, password, amarVaEhtemal)
            elif lesson == 4:
                openClass(username, password, hesaban)
            elif lesson == 5:
                openClass(username, password, hendese)
            elif lesson == 6:
                openClass(username, password, negaresh)
            elif lesson == 7:
                openClass(username, password, farsi)
            elif lesson == 8:
                openClass(username, password, arabi)
            elif lesson == 9:
                openClass(username, password, dini)
            elif lesson == 10:
                openClass(username, password, fizik)
            elif lesson == 11:
                openClass(username, password, shimi)
            elif lesson == 12:
                openClass(username, password, zaban)
            clearConsole()

sys.exit()

标签: pythonseleniumkeyboard

解决方案


推荐阅读