앞서 장에서는 처음에 인스타 자동 로그인을 실행하였다. 그리고 해시태그를 이용해서 자동 검색을 하였다. 그리고 원하는 페이지만큼 자동으로 좋아요를 클릭하였다. (앞에 내용을 확인하고 싶다면 블로그에 인스타그램 카테고리에서 확인할 수 있다.)
이번장에는 좋아요를 클릭하고 동시에 해당 페이지에 "hello BTS" 라는 댓글을 남길 것이다.
이번 코드의 진행 순서는 아래와 같다.
1. 자동 로그인
2. #BTS 로 검색하기
3. 페이지 "좋아요" 클릭하기
4. 댓글로 "hello BTS" 남기기
5. 다음페이지로 넘기기
6. 3~5번을 8번 반복하기.
우선 댓글에 xpath 위치를 instagram에서 확인해보자. xpath에 대한 내용은 아래 링크에서 확인할 수 있다.
scribblinganything.tistory.com/13?category=942512
아래 그림처럼 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)
결과화면>>
주석>>
코드는 leave_like_comment method 부분만 수정해서 올렸다.
presence_of_element_located 와 element_to_be_clickable 를 사용해서 댓글 창이나 좋아요 창이 로딩될 때까지 대기 하였다.
send_keys 를 사용해서 "hello BTS" 댓글을 달아 주었다.
처음에 댓글을 달려고 하니 오류가 계속 발생했는데 위에 코드처럼 댓글부분을 한번 click 하고 다시 읽으니 오류가 해결 되었다.
내 생각에는 인스타그램에서 그냥 댓글을 달 수 없게 뭔가 조치를 한듯하다. 어쨌든 댓글 element에 두번 접근 하니 댓글 쓰기가 가능하였다.
'파이썬(Python) > 인스타그램' 카테고리의 다른 글
인스타그램 자동 "좋아요" 클릭 (like click) 파이썬 (0) | 2020.12.10 |
---|---|
인스타그램 자동검색(해시태그) (0) | 2020.12.03 |
인스타그램 자동 로그인 (Instagram Log in) (4) | 2020.12.01 |