def go_to_nth_page(web_driver: webdriver, counter: int) -> None: # STEP THROUGH TO Nth PAGE for _ in range(counter): # This special character can be used because of the header. # plain '»' fails on WW because they pad many spaces step_forward = web_driver.find_element_by_partial_link_text('»') step_forward.click() time.sleep(.5)
def scrape_followers(driver: webdriver, username: str) -> List[str]: # Load account page driver.get(f"https://www.instagram.com/{username}/") # Click the 'Followers' link driver.find_element_by_partial_link_text("follower").click() # Wait for the followers modal to load xpath = "//div[@style='position: relative; z-index: 1;']/div/div[2]/div/div[1]" WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, xpath))) # TODO: Scrolling Magic Here # # Scrape the followers xpath = "//div[@style='position: relative; z-index: 1;']//ul/li/div/div/div/div/a" followers_elems = driver.find_elements_by_xpath(xpath) return [e.text for e in followers_elems]
def scrape_followers( driver: webdriver, username: str, cookies: List[Dict[str, Any]] = None) -> Tuple[str, str, Set[str], Set[str]]: # CSS Selector for followers and following lists list_css: str = "div[role='dialog'] a.notranslate" if cookies: # Load any page before setting cookies driver.get("https://www.instagram.com/data/manifest.json") for cookie in cookies: driver.add_cookie(cookie) # Load account page driver.get(f"https://www.instagram.com/{username}/") num_followers: str = driver.find_element_by_css_selector( "a[href*='followers'] span").text num_following: str = driver.find_element_by_css_selector( "a[href*='following'] span").text # Click the 'Followers' link driver.find_element_by_partial_link_text("followers").click() WebDriverWait(driver, 10).until( EC.visibility_of_all_elements_located((By.CSS_SELECTOR, list_css))) # TODO: Scrolling Magic here _followers: List = driver.find_elements_by_css_selector(list_css) followers: Set[str] = {i.text for i in _followers} driver.find_element_by_css_selector( "div[role='dialog'] button span[aria-label='Close']").click() # Click the 'Following' link driver.find_element_by_partial_link_text("following").click() WebDriverWait(driver, 10).until( EC.visibility_of_all_elements_located((By.CSS_SELECTOR, list_css))) # TODO: Scrolling Magic here _following: List = driver.find_elements_by_css_selector(list_css) following: Set[str] = {i.text for i in _following} return (num_followers, num_following, followers, following)
def CLR_Html(browser: webdriver, Name: str) -> str: """ a = CLR_Html(self.b, ['page_name', 'profile_message_send', 'profile_action_btn', 'profile_msg_split']) print(a) :param Name: :param browser: :return: """ res = [] all_res = [] # a = Soport_webdriver.CLR_Html(b,['mail_box_send']) for name in Name: try: all_res.append(browser.find_element_by_id(name).text) res.append('find_element_by_id') except: pass try: all_res.append(browser.find_element_by_name(name).text) res.append('find_element_by_name') except: pass try: all_res.append(browser.find_element_by_xpath(name).text) res.append('find_element_by_xpath') except: pass try: all_res.append(browser.find_element_by_link_text(name).text) res.append('find_element_by_link_text') except: pass try: all_res.append( browser.find_element_by_partial_link_text(name).text) res.append('find_element_by_partial_link_text') except: pass try: all_res.append(browser.find_element_by_tag_name(name).text) res.append('find_element_by_tag_name') except: pass try: all_res.append(browser.find_element_by_class_name(name).text) res.append('find_element_by_class_name') except: pass try: all_res.append(browser.find_element_by_css_selector(name).text) res.append('find_element_by_css_selector') except: pass io = '' for x in range(len(res)): io += '{} |-| {} |-| {}\n'.format(str(Name[x]), str(res[x]), str(all_res[x])) return io