Files
IHATEAMGUSITE/main.py
2024-09-21 00:35:42 +09:00

93 lines
2.8 KiB
Python

from selenium import webdriver
from selenium.webdriver.firefox.options import Options
# from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
import time
from bs4 import BeautifulSoup
import lxml
import threading
import discord
from discord.ext import commands
#objs
options = Options()
intents = discord.Intents.default()
prikols = commands.Bot(intents=intents, command_prefix = '!')
# consts
weekdays = ("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье")
options.headless = True
intents.message_content = True
intents.messages = True
url = "https://amursu.ru/obrazovanie/timetable/timetable-group/?id_group=1891"
# гайд на завтра:
# 1. собираем все хпатх | ок
# 2. расчекрыживаем при помощи bs4 | ок
# 3. приводим в читаемый вид | fail
# 4. отправляем в дс | ок
def get_element_from_driver(url : str, instruction : list) -> list:
driver = webdriver.Firefox()
driver.implicitly_wait(10)
driver.get(url)
assert "Расписание" in driver.title
elem = []
for i in instruction:
elem.append(driver.find_element(By.XPATH, i).get_attribute('innerHTML'))
driver.close()
return elem
def get_day_info(html : str) -> list:
'''Get's day of th week number
posible numbers: 3-9 (included)'''
soup = BeautifulSoup(html, 'lxml')
soupa = soup.findAll("a", attrs = {'class':'ui link blue speak'})
soup = BeautifulSoup(str(soupa)).find_all('a')
soupa = ''
for data in soup:
soupa += data.get('data-speech') + '\n'
return soupa
# надо будет вынести 80 строчку в эту функцию ок?
def get_current_week_number(html):
# /html/body/main/div[2]/div/div/div[3]/div[4]/div[2]
soup = BeautifulSoup(html, "lxml")
current_week = soup.find("div")
return current_week.text()
@prikols.command()
async def day(ctx, arg):
try:
await ctx.send(get_day_info(arg, url=url))
except BaseException as err:
await ctx.send(err)
@prikols.command()
async def week(ctx):
try:
arr = []
for day in range(3,9):
arr.append(f'/html/body/main/div[2]/div/div/div[3]/div[4]/div[{day}]')
arr.append('/html/body/main/div[2]/div/div/div[3]/div[4]/div[2]')
html = get_element_from_driver(url=url, instruction=arr)
for i in range(len(html)):
await ctx.send(weekdays[i] + f" {html[len(arr)-1]}" + "\n" + get_day_info(html[i]))
except BaseException as err:
await ctx.send(err)
@prikols.event
async def on_ready():
print('yolo')
# steal my token lol
prikols.run('MTE5ODIwMTEwMTU2OTI0OTM4MA.G7h2hW.ei4EZVmva7SymBijBO9tcx8xhNBtQMMSu4AsE0')