1+ # import getpass
2+ # my_password = getpass.getpass("What is your password?\n")
3+ # print(my_password)
4+ from urllib .parse import urlparse
5+ import os
6+ import time
7+ import requests
8+ from conf import INSTA_USERNAME , INSTA_PASSWORD
9+ from selenium import webdriver
10+
11+ browser = webdriver .Chrome ()
12+
13+ url = "https://www.instagram.com"
14+ browser .get (url )
15+
16+ time .sleep (2 )
17+ username_el = browser .find_element_by_name ("username" )
18+ username_el .send_keys (INSTA_USERNAME )
19+
20+ password_el = browser .find_element_by_name ("password" )
21+ password_el .send_keys (INSTA_PASSWORD )
22+
23+ time .sleep (1.5 )
24+ submit_btn_el = browser .find_element_by_css_selector ("button[type='submit']" )
25+ submit_btn_el .click ()
26+
27+ body_el = browser .find_element_by_css_selector ("body" )
28+ html_text = body_el .get_attribute ("innerHTML" )
29+
30+ # print(html_text)
31+
32+ """
33+ <button class="_5f5mN jIbKX _6VtSN yZn4P">Follow</button>
34+ """
35+
36+ # browser.find_elements_by_css_selector("button")
37+
38+ # xpath
39+ # my_button_xpath = "//button"
40+ #browser.find_elements_by_xpath(my_button_xpath)
41+
42+ def click_to_follow (browser ):
43+ # my_follow_btn_xpath = "//a[contains(text(), 'Follow')][not(contains(text(), 'Following'))]"
44+ # my_follow_btn_xpath = "//*[contains(text(), 'Follow')][not(contains(text(), 'Following'))]"
45+ my_follow_btn_xpath = "//button[contains(text(), 'Follow')][not(contains(text(), 'Following'))]"
46+ follow_btn_elments = browser .find_elements_by_xpath (my_follow_btn_xpath )
47+ for btn in follow_btn_elments :
48+ time .sleep (2 ) # self-throttle
49+ try :
50+ btn .click ()
51+ except :
52+ pass
53+
54+ # new_user_url = "https://www.instagram.com/ted/"
55+ # browser.get(new_user_url)
56+ # click_to_follow(browser)
57+
58+ time .sleep (2 )
59+ the_rock_url = "https://www.instagram.com/therock/"
60+ browser .get (the_rock_url )
61+
62+
63+ post_url_pattern = "https://www.instagram.com/p/<post-slug-id>"
64+ post_xpath_str = "//a[contains(@href, '/p/')]"
65+ post_links = browser .find_elements_by_xpath (post_xpath_str )
66+ post_link_el = None
67+
68+ if len (post_links ) > 0 :
69+ post_link_el = post_links [0 ]
70+
71+ if post_link_el != None :
72+ post_href = post_link_el .get_attribute ("href" )
73+ browser .get (post_href )
74+
75+ video_els = browser .find_elements_by_xpath ("//video" )
76+ images_els = browser .find_elements_by_xpath ("//img" )
77+ base_dir = os .path .dirname (os .path .abspath (__file__ ))
78+ data_dir = os .path .join (base_dir , "data" )
79+ os .makedirs (data_dir , exist_ok = True )
80+
81+ # PIL to verify the size of any given image.
82+
83+ def scrape_and_save (elements ):
84+ for el in elements :
85+ # print(img.get_attribute('src'))
86+ url = el .get_attribute ('src' )
87+ base_url = urlparse (url ).path
88+ filename = os .path .basename (base_url )
89+ filepath = os .path .join (data_dir , filename )
90+ if os .path .exists (filepath ):
91+ continue
92+ with requests .get (url , stream = True ) as r :
93+ try :
94+ r .raise_for_status ()
95+ except :
96+ continue
97+ with open (filepath , 'wb' ) as f :
98+ for chunk in r .iter_content (chunk_size = 8192 ):
99+ if chunk :
100+ f .write (chunk )
101+
102+ """
103+ LONG TERM Goal:
104+ Use machine learning to classify the post's
105+ image or video
106+ and then comment in a relevant fashion
107+ """
108+
109+ """
110+ <textarea aria-label="Add a comment…" placeholder="Add a comment…" class="Ypffh" autocomplete="off" autocorrect="off" style="height: 18px;"></textarea>
111+ """
112+ def automate_comment (browser , content = "That is cool!" ):
113+ time .sleep (3 )
114+ comment_xpath_str = "//textarea[contains(@placeholder, 'Add a comment')]"
115+ comment_el = browser .find_element_by_xpath (comment_xpath_str )
116+ comment_el .send_keys (content )
117+ submit_btns_xpath = "button[type='submit']"
118+ submit_btns_els = browser .find_elements_by_css_selector (submit_btns_xpath )
119+ time .sleep (2 )
120+ for btn in submit_btns_els :
121+ try :
122+ btn .click ()
123+ except :
124+ pass
125+
126+
127+ def automate_likes (browser ):
128+ like_heart_svg_xpath = "//*[contains(@aria-label, 'Like')]"
129+ all_like_hearts_elements = browser .find_elements_by_xpath (like_heart_svg_xpath )
130+ max_heart_h = - 1
131+ for heart_el in all_like_hearts_elements :
132+ h = heart_el .get_attribute ("height" )
133+ current_h = int (h )
134+ if current_h > max_heart_h :
135+ max_heart_h = current_h
136+ all_like_hearts_elements = browser .find_elements_by_xpath (like_heart_svg_xpath )
137+ for heart_el in all_like_hearts_elements :
138+ h = heart_el .get_attribute ("height" )
139+ if h == max_heart_h or h == f"{ max_heart_h } " :
140+ parent_button = heart_el .find_element_by_xpath ('..' )
141+ time .sleep (2 )
142+ try :
143+ parent_button .click ()
144+ except :
145+ pass
0 commit comments