본문 바로가기
데이터 시각화 및 애플리케이션 개발/AI 컴퓨터 비전프로젝트

AI 컴퓨터 비전 프로젝트_2개월차_(크롤링 :: 인스타그램, 리팩토리 함수제작 및 실행)

by 바다의 공간 2024. 5. 30.

인스타그램은 보안(?)이 좀 강화되어있어서

html이나 xpath가 종종 바뀌기때문에 아래의 코드가 100%맞지는 않는다.

만약 다르다면 xpath를 재확인해주어야 합니다.


1. 인스타그램 로그인


#크롬드라이버 임포트

import chromedriver_autoinstaller
from selenium import webdriver

 

#드라이버 창 띄우기

driver = webdriver.Chrome()
driver.get(url)

 

#인스타그램 로그인

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. 스크롤 내리기

#시간을 처리할 수 있는 모듈

import time

 

# 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가 변경되어서 실행되지 않았습니다.