def fetch_stream_url(self, stream_page): selectors = self.selectors driver = self.driver driver.get(stream_page) self._execute_js_scripts() # Choose yourupload as streaming server yourupload_button = driver.find_element_by_css_selector( selectors.YOURUPLOAD) yourupload_button.click() yourupload_button.click() player = driver.find_element_by_css_selector(selectors.PLAYER) res, calls, success = call_till_true(is_iframe_loaded, self.episode_fetch_timeout, driver) printd("outside wait loop ;", "success:", success, "calls:", calls) # No need to click. YourUpload initiates the request during page load. # video = player.find_element_by_css_selector("video") # video.click() return self.search_url_in_perflogs(self.regex_pattern_objects)
def fetch_stream_url(self, stream_page): selectors = self.selectors driver = self.driver driver.get(stream_page) self._execute_js_scripts() # Choose mp4upload as streaming server # if self.selectors != KickassAnimeSelectors: # # Kickassanime uses MP4Upload by default # # print("clicking") mp4upload_button = driver.find_element_by_css_selector( selectors.MP4UPLOAD) mp4upload_button.click() mp4upload_button.click() player = driver.find_element_by_css_selector(selectors.PLAYER) # if self.selectors != KickassAnimeSelectors: # res, calls, success = call_till_true(is_iframe_loaded, self.episode_fetch_timeout, driver) # else: # res, calls, success = call_till_true(is_document_loaded, self.episode_fetch_timeout, driver) res, calls, success = call_till_true(is_iframe_loaded, self.episode_fetch_timeout, driver) printd("outside wait loop ;", "success:", success, "calls:", calls) iframe = player.find_element_by_css_selector("iframe") iframe.click() return self.search_url_in_perflogs(self.regex_pattern_objects)
def fetch_stream_url(self, stream_page): selectors = self.selectors driver = self.driver driver.get(stream_page) self._execute_js_scripts() # Choose openupload as streaming server # GoGoAnime has 2 open upload buttons. First one's broken. openupload_buttons = driver.find_elements_by_css_selector( selectors.OPENUPLOAD) openupload_button = openupload_buttons[-1] if selectors == GoGoAnimeSelectors: openupload_button.click() else: real_btn = openupload_button.find_element_by_tag_name("a") time.sleep(3) real_btn.click() player = driver.find_element_by_css_selector(selectors.PLAYER) res, calls, success = call_till_true(is_iframe_loaded, self.episode_fetch_timeout, driver) printd("outside wait loop ;", "success:", success, "calls:", calls) frame = player.find_element_by_tag_name("iframe") if selectors == GoGoAnimeSelectors: frame.click() # First click opens a pop up time.sleep(2) frame.click() # Second click triggers stream else: # Kickassanime is weird. They have a fake player on top of the real one. time.sleep(2) frame.click() time.sleep(7) frame.click() time.sleep(3) stream_url = self.search_url_in_perflogs(self.regex_pattern_objects) if not stream_url: player.click() time.sleep(2) stream_url = self.search_url_in_perflogs( self.regex_pattern_objects) return stream_url
def fetch_stream_url(self, stream_page): selectors = self.selectors driver = self.driver driver.get(stream_page) self._execute_js_scripts() # Choose openupload as streaming server # GoGoAnime has 2 open upload buttons. First one's broken. openupload_buttons = driver.find_elements_by_css_selector(selectors.OPENUPLOAD) openupload_button = openupload_buttons[1] if len(openupload_buttons) > 1 else openupload_buttons[0] openupload_button.click() openupload_button.click() # First click doesn't register in some cases player = driver.find_element_by_css_selector(selectors.PLAYER) ''' while True: try: status_raw = driver.find_element_by_css_selector(LOAD_STATUS_SELECTOR).text status = json.loads(status_raw) print("in loop") if status["iframe_loaded"]: print("iframe loaded") break except NoSuchElementException as err: print("not there yet " + err.msg) ''' res, calls, success = call_till_true(is_iframe_loaded, self.episode_fetch_timeout, driver) printd("outside wait loop ;", "success:", success, "calls:", calls) frame = player.find_element_by_tag_name("iframe") # TODO: Find alternative to use time.sleep() # First click opens a pop up frame.click() # [BAD] Waiting to make sure media player is accessible in the iframe # (because I have a wooden PC from the stone age -_-) time.sleep(2) # Second click triggers stream frame.click() # time.sleep(3) # [BAD] Waiting to make sure HTTP request to the stream file is made return self.search_url_in_perflogs(self.regex_pattern_objects)
def fetch_episode_list(self): # -> { 'Episode 1': 'https://www.kickassanime.ru/anime/gintama/episode-1', ... } if self.episodes_dict: return self.episodes_dict printd("fetching episode list") printing.fetching_list(self.anime_url) driver = self.driver # Execute JS to load the entire episode list self._execute_js_scripts() ep_list_container = driver.find_element_by_css_selector( GoGoAnimeSelectors.EPISODE_LIST) def fetch_ep_list(container): return container.find_elements_by_css_selector( GoGoAnimeSelectors.EPISODE) # Sometimes the episode list takes a while to load and fetch_ep_list gets 0 episodes # call_till_true will keep trying for n seconds till we get >0 episodes ep_list, calls, success = call_till_true( fetch_ep_list, TimeoutConfig.FETCHING_EPISODE_LIST, ep_list_container) if not success: # TODO: Change error raised raise ValueError("Failed to fetch episode list") printd("calls", calls) # print(ep_list_container.text) # print(len(ep_list)) ep_dict = {} for ep in ep_list: if ep.text: episode_name = re.search(r"EP ([\d\-\.]+)", ep.text).group().replace( "EP", "Episode") ep_dict[episode_name] = ep.get_attribute("href") # print(ep_dict) return ep_dict