파이썬(Python)/인스타그램

파이썬으로 인스타그램 자동 댓글 남기기(python instagram comment automation)

끄적끄적아무거나 2021. 1. 25. 21:02
반응형

앞서 장에서는 처음에 인스타 자동 로그인을 실행하였다. 그리고 해시태그를 이용해서 자동 검색을 하였다. 그리고 원하는 페이지만큼 자동으로 좋아요를 클릭하였다. (앞에 내용을 확인하고 싶다면 블로그에 인스타그램 카테고리에서 확인할 수 있다.)

 

이번장에는 좋아요를 클릭하고 동시에 해당 페이지에 "hello BTS" 라는 댓글을 남길 것이다. 

 

이번 코드의 진행 순서는 아래와 같다.

 

1. 자동 로그인

2. #BTS 로 검색하기

3. 페이지 "좋아요" 클릭하기

4. 댓글로 "hello BTS" 남기기

5. 다음페이지로 넘기기

6. 3~5번을 8번 반복하기.

 

우선 댓글에 xpath 위치를 instagram에서 확인해보자. xpath에 대한 내용은 아래 링크에서 확인할 수 있다.

scribblinganything.tistory.com/13?category=942512

 

xpath란

요즘 나오는 웹페이지들은 마우스 오른쪽 클릭으로 아래 그림 처럼 페이지 소스 보기를 하면 복잡한 코드를 확인할 수 있다. 웹 크롤링이나 웹 자동화를 위해서는 특정 부분의 조작이나 정보를

scribblinganything.tistory.com

아래 그림처럼 xpath 경로를 복사해서 가져왔다 (xpath : /html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea)

 

코드>>

    def leave_like_comment(self, number):
        if number > 0:
            first_pic = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located\
                ((By.XPATH, '//*[@id="react-root"]/section/main/article/div[1]/div/div/div[1]/div[1]/a')))
            first_pic.click()


            like_action = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located\
                ((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button')))
            
            # /html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button/div/span/svg
            # aria-label
            like_path = self.driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button/div/span/*[name()="svg"]')  
            like_text = like_path.get_attribute('aria-label')
            print(like_text)

            if like_text == "좋아요": 
                print("좋아요 안되어 있으므로 클릭하기")
                like_action.click()    
                comment = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable\
                    ((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea')))
                comment.click()  
                comment = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable\
                    ((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea')))

                comment.send_keys("hello BTS")   
                comment.send_keys(Keys.RETURN) #엔터키 입력                
            else: 
                print("좋아요 되어 있음")

            if number > 1:
                next_btn = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located\
                    ((By.XPATH, '/html/body/div[5]/div[1]/div/div/a')))
                next_btn.click()   

                while number > 1:
                    like_action = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located\
                        ((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button')))
                    like_path = self.driver.find_element_by_xpath('/html/body/div[5]/div[2]/div/article/div[3]/section[1]/span[1]/button/div/span/*[name()="svg"]')  
                    like_text = like_path.get_attribute('aria-label')
                    print(like_text)                        
                    if like_text == "좋아요": 
                        print("좋아요 안되어 있으므로 클릭하기")
                        like_action.click()    
                        comment = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable\
                            ((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea')))
                        comment.click()  
                        comment = WebDriverWait(self.driver, 10).until(EC.element_to_be_clickable\
                            ((By.XPATH, '/html/body/div[5]/div[2]/div/article/div[3]/section[3]/div/form/textarea')))

                        comment.send_keys("hello BTS")   
                        comment.send_keys(Keys.RETURN) #엔터키 입력                      
                    else: 
                        print("좋아요 되어 있음")


                    next_btn = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located\
                        ((By.XPATH, '/html/body/div[5]/div[1]/div/div/a[2]')))
                    next_btn.click()   

                    number = number - 1 
    


oop_instagram = InstagramAutomation()
oop_instagram.log_in()
oop_instagram.searchHashtag("BTS")
oop_instagram.leave_like_comment(8)
time.sleep(1000)

 

 

결과화면>>

bts 인스타그램 자동 좋아요 댓글 남기기

 

주석>>

 

코드는 leave_like_comment method 부분만 수정해서 올렸다. 

 

presence_of_element_located 와 element_to_be_clickable 를 사용해서 댓글 창이나 좋아요 창이 로딩될 때까지 대기 하였다. 

 

send_keys 를 사용해서 "hello BTS" 댓글을 달아 주었다.

 

처음에 댓글을 달려고 하니 오류가 계속 발생했는데 위에 코드처럼 댓글부분을 한번 click 하고 다시 읽으니 오류가 해결 되었다.

 

내 생각에는 인스타그램에서 그냥 댓글을 달 수 없게 뭔가 조치를 한듯하다. 어쨌든 댓글 element에 두번 접근 하니 댓글 쓰기가 가능하였다.

 

 

반응형