인스타그램은 보안(?)이 좀 강화되어있어서
html이나 xpath가 종종 바뀌기때문에 아래의 코드가 100%맞지는 않는다.
만약 다르다면 xpath를 재확인해주어야 합니다.
1. 인스타그램 로그인
#크롬드라이버 임포트
import chromedriver_autoinstaller
from selenium import webdriver
#드라이버 창 띄우기
driver = webdriver.Chrome()
#인스타그램 로그인
id = 아이디를 넣어줍니다
pw = 비밀번호를 넣어줍니다.
아이디와 비밀번호의 칸에 각각 넣으려고하면 각 칸의 xpath의 위치를 알아야합니다.
그 후 입력값(아이디,비밀번호)을 넣어주고 로그인을 클릭하는것까지 진행하려고 합니다.
#xpath찾기
input_id = driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input')
input_pw = driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input')
#ID, PW 넣기
input_id.send_keys(id)
input_pw.send_keys(pw)
#로그인버튼 클릭하기.
.click 매소드사용합니다.
driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[3]/button').click()
2. 인스타그램 해시태그 검색
hashtag = '불금'
driver.get(url)
해시태그가 '불금'인 피드가 보여지게 됩니다.
3. 스크롤 내리기
#시간을 처리할 수 있는 모듈
# 3초 기다렸다가 for문을 반복할 수 있도록 작성
driver안에 excute_script(매소드: 안에 자바스크립트언어를 사용가능해서 자바스크립트로 브라우저를 처리할 수 있음)
scrollTo(매소드: 스크롤 하는 매소드)을 이용해서 0에서
body.scrollHeight(스크롤의 높이값)맨 아래로 내릴 수 있습니다.
for _ in range(1):
driver.execute_script('window.scrollTo(0, document.body.scrollHeight)')
# time.sleep(3)
4. 원하는 사진 클릭하기
# 해시태그로 찾은 사진 중 원하는 사진을 클릭해보았습니다.
똑같이 xpath를 찾아서 변수에 넣어주고
driver.find_element와 click매소드를 사용하여서 클릭까지 해주었습니다.
xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[2]/section/main/article/div/div[2]/div/div[2]/div[2]/a'
driver.find_element('xpath', xpath).click()
5. 좋아요 클릭 및 댓글달기
# 좋아요 클릭
좋아요 부분을 div를 찾아서 full xpath를 복사하여 하트 부분에 클릭매소드 넣어주기
클릭을 2번 넣은 이유?- 클릭한번만 넣으면 좋아요가 눌리지 않는 오류를 해결하기 위해 2번 실행했습니다.
like_xpath = '/html/body/div[7]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[1]/span[1]/div/div'
driver.find_element('xpath', like_xpath).click()
driver.find_element('xpath', like_xpath).click()
# 댓글넣기 (테스트일뿐이라 달기는 하지않음)
댓글 입력부분의 부분을 클릭해주고,(클릭을 해야 글자입력이 가능하기때문에)
댓글입력 부분의 div를 찾아서 full xpath를 복사하여 댓글입력칸에 send_keys 넣어주기
# 좋은 정보 감사합니다!
reply_xpath = '/html/body/div[7]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/textarea'
driver.find_element('xpath', reply_xpath).click()
driver.find_element('xpath', reply_xpath).send_keys('좋은 정보 감사합니다!')
6. 함수로 리팩토링
#로그인
def login(id, pw):
input_id = driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[1]/div/label/input')
input_pw = driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[2]/div/label/input')
input_id.send_keys(id)
input_pw.send_keys(pw)
driver.find_element('xpath', '/html/body/div[2]/div/div/div[2]/div/div/div[1]/section/main/article/div[2]/div[1]/div[2]/form/div/div[3]/button').click()
#해시태그 검색
def search(hashtag):
driver.get(url)
#좋아요 및 댓글달기
def like_and_comment(comment):
# 이미지 선택
xpath = '/html/body/div[2]/div/div/div[2]/div/div/div[1]/div[1]/div[2]/section/main/article/div/div[2]/div/div[2]/div[2]/a'
driver.find_element('xpath', xpath).click()
# 좋아요
like_xpath = '/html/body/div[7]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[1]/span[1]/div/div'
driver.find_element('xpath', like_xpath).click()
driver.find_element('xpath', like_xpath).click()
# 댓글달기
reply_xpath = '/html/body/div[7]/div[1]/div/div[3]/div/div/div/div/div[2]/div/article/div/div[2]/div/div/div[2]/section[3]/div/form/div/textarea'
driver.find_element('xpath', reply_xpath).click()
driver.find_element('xpath', reply_xpath).send_keys(comment)
#실행
driver = webdriver.Chrome()
driver.get(url)
driver.implicitly_wait(3)
id = '아이디 입력'
pw = '비밀번호!'
login(id, pw)
time.sleep(4)
hashtag = '사과'
search(hashtag)
time.sleep(4)
like_and_comment('안녕하세요! 잘 보고 갑니다 ~ 휘리릭')
실행을 하면 id, pw를 입력하고 로그인을 하고 해시태그 검색 후 사진을 눌러서 좋아요와 댓글입력까지 했습니다.
여기서 하트는 그사이xpath가 변경되어서 실행되지 않았습니다.