This is a project that finds a specific anime (show) and checks to see if there is a new episode of it .
this is also the first time that i used def
like this and wanted to ask how this project looks and how i could improve it ?
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.common.keys import Keys
import time
path = "c:/users/admin/appdata/local/programs/python/python38-32/chromedriver.exe"
driver = webdriver.Chrome(path)
chose = int(input("Press 1 for Black Clover \nPress 2 for Fire Force : "))
class BlackClover:
def __init__(self, title):
# lets the user chose which anime(show) he or she wants to watch.
self.title = title
# goes to the website that i want .
self.url = driver.get("https://www.gogoanime.movie/")
# i let it sleep for a few seconds before it goes to the next task
time.sleep(3)
# goes the english speaking anime (shows)
self.dub = driver.find_element_by_xpath('//*[@id="load_recent_release"]/div[1]/h2/a[2]')
self.dub.send_keys(Keys.RETURN)
# will be used later to filter out the episode number .
self.numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]
self.divider = []
# the anime name (shows name).
self.clover = "Black Clover (TV) (Dub)"
def checker(self):
# will be used to retrieve the episode of the anime (show).
global episode
# will be used to go through the li element (HTML)
global n
n = 1
total = 0
# checks to see if the first li element is equal to "Black Clover (TV) (Dub)".
first_anime = WebDriverWait(driver, 3).until(ec.visibility_of_element_located(
(By.XPATH, '//*[@id="load_recent_release"]/div[2]/ul/li[1]/p[1]/a'))).get_attribute("innerHTML")
if first_anime == "Black Clover (TV) (Dub)":
print("first good")
driver.find_element_by_xpath('//*[@id="load_recent_release"]/div[2]/ul/li[1]/p[1]/a').send_keys(Keys.RETURN)
# if it is not equal to "Black Clover (TV) (Dub)" it will loop through the next li element until it finds it.
else:
while True:
# the next li element
name = WebDriverWait(driver,3).until(ec.visibility_of_element_located(
(By.XPATH, f'//*[@id="load_recent_release"]/div[2]/ul/li[{n}]/p[1]/a'))).get_attribute("innerHTML")
if name == self.clover:
print("good")
# checks which episode it's on and looks if it's a new episode
episode = WebDriverWait(driver,2).until(ec.visibility_of_element_located(
(By.XPATH, f'//*[@id="load_recent_release"]/div[2]/ul/li[{n}]/p[2]'))).get_attribute("innerHTML")
# retrieves the episode number
self.episodes()
break
if name != self.clover:
print("bad")
total += 1
n+= 1
if total == 20:
print("nothing")
break
EDIT : i let the user chose which anime(show) he or she wants to check by entering 1 or 2 in the input variable called chose
at the top.
Thanks to @fabrizzio_gz .
def episodes(self):
global joiner
# divider is a empty list
divider = self.divider
# copies the the variable "episode"
k= list(episode)
splitter = list(episode)
# gets the last three numbers in "k".
number = len(k)-3
last_number = k[number:]
last_number_2 = k[-1]
# checks to see if there are any numbers in the the variable "splitter" .
for i in splitter:
# if the i in splitter isn't a number it replaces it with a empty string.
if i not in self.numbers:
t = splitter.index(i)
splitter[t] = ""
print(splitter)
# if i is a number then it will add to the list with the variablename "divider" .
if i in self.numbers:
divider.append(i)
if divider == last_number and self.title == "Black Clover (TV) (Dub)":
# this joins all the numbers together in the list
joiner = ''.join(divider)
# checks to see if the episode is greater then 129
if int(joiner) > 129:
time.sleep(2)
# when the episode is greater then 129 it clicks the anime (show).
click = driver.find_element_by_xpath(f'//*[@id="load_recent_release"]/div[2]/ul/li[{n}]/p[1]/a')
click.send_keys(Keys.RETURN)
break
else :
# if the episode isn't greater then 129 then it returns the following .
return print("no new episode of : BLACK CLOVER ")
else:
joiner = ''.join(divider)
if int(joiner) >= 4:
time.sleep(2)
# when the episode is greater then 4 it clicks the anime (show).
click = driver.find_element_by_xpath(
f'//*[@id="load_recent_release"]/div[2]/ul/li[{n}]/p[1]/a')
click.send_keys(Keys.RETURN)
break
else:
# if the episode isn't greater then 4 then it returns the following .
return print("no new episode of : FIRE FORCE ")
if chose == 1:
main = BlackClover(title="Black Clover (TV) (Dub)")
main.checker()
if chose == 2:
main = BlackClover(title="Enen no Shouboutai: Ni no Shou (Dub)")
main.checker()